[TIL] MySQL TIL Day 7

์ตœ๋Œ€ 1 ๋ถ„ ์†Œ์š”

๐ŸŸก [HackerRank] SQL Project Planning

https://www.hackerrank.com/challenges/sql-projects/problem?isFullScreen=true

Solution

์ด ๋ฌธ์ œ๋Š” JOIN์„ ์‚ฌ์šฉํ•˜์—ฌ SELF JOIN ํ›„ GROUP BY, ORDER BY๋ฅผ ์ด์šฉํ•ด ํ•ด๊ฒฐํ•˜๋ฉด ๋˜๋Š” ๋ฌธ์ œ์ด๋‹ค. ์ด๋ ‡๊ฒŒ ์ƒ๊ฐํ•˜๋ฉด ์‰ฌ์šด ๋ฌธ์ œ์ฒ˜๋Ÿผ ๋ณด์ด๋‚˜, ๋ฌธ์ œ ํ•ด๊ฒฐ์„ ์œ„ํ•œ ์•„์ด๋””์–ด๋ฅผ ์–ป๊ธฐ๊ฐ€ ์กฐ๊ธˆ ๊นŒ๋‹ค๋กญ๋‹ค.

๊ธฐ๋ณธ ์•„์ด๋””์–ด
๊ฐœ๋ณ„ ํ”„๋กœ์ ํŠธ์˜ ์‹œ์ž‘์ผ(Start_Date)๋Š” ์ข…๋ฃŒ์ผ(End_Date) ์นผ๋Ÿผ์— ์—†๊ณ , ์ข…๋ฃŒ์ผ(End_Date)๋Š” ์‹œ์ž‘์ผ(Start_Date) ์นผ๋Ÿผ์— ์—†๋‹ค. ์ฆ‰, ์ข…๋ฃŒ์ผ ์นผ๋Ÿผ์— ์—†๋Š” ์‹œ์ž‘์ผ, ์‹œ์ž‘์ผ ์นผ๋Ÿผ์— ์—†๋Š” ์ข…๋ฃŒ์ผ์„ ๊ฐ๊ฐ ์ฟผ๋ฆฌํ•˜์—ฌ JOIN ํ›„ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ฉด ๋œ๋‹ค.

Code

SELECT Start_Date, MIN(End_Date)
FROM (SELECT Start_Date
      FROM Projects
      WHERE Start_Date NOT IN (SELECT End_Date FROM Projects)) a,
      (SELECT End_Date
      FROM Projects
      WHERE End_Date NOT IN (SELECT Start_Date FROM Projects)) b
WHERE Start_Date < End_Date
GROUP BY Start_Date
ORDER BY DATEDIFF(MIN(End_Date), Start_Date), Start_Date

JOIN์„ ํ•˜๋Š” ๋˜ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•

์•„๋ž˜์™€ ๊ฐ™์ด FROM ์ ˆ์— ์—ฌ๋Ÿฌ๊ฐœ์˜ ํ…Œ์ด๋ธ”์„ ์ง€์ •ํ•ด์ฃผ๊ณ , SELECT๋กœ ์ฟผ๋ฆฌํ•  ์นผ๋Ÿผ์„ ์ง€์ •ํ•˜๋ฉด JOIN ๊ธฐ๋Šฅ์ฒ˜๋Ÿผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. WHERE์ ˆ์— ์•„๋ฌด๊ฒƒ๋„ ์ง€์ •ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด, ์•„๋ž˜ ์ฟผ๋ฆฌ๋Š” ์ž๋™์ ์œผ๋กœ a์™€ b์˜ ๋ชจ๋“  combination์„ ์ถœ๋ ฅํ•œ๋‹ค.

SELECT a, b
FROM Table 1, Table 2
WHERE ~

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ