[TIL] MySQL TIL Day 7
๐ก [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 ~
๋๊ธ๋จ๊ธฐ๊ธฐ