๐ ๋ณธ ํฌ์คํ ์์ ์ฌ์ฉ๋๋ ํ ์ด๋ธ์ ์๋ฃ์ ์ถ์ฒ๋ HackerRank ์์ ๋ฐํ๋๋ค. ๋ ๋ค์ํ SQL ๋ฌธ์ ๋ฅผ ํ์ด๋ณด์๋ ค๋ฉด
HackerRank ์ฌ์ดํธ๋ฅผ ๋ฐฉ๋ฌธํด ๋ณด์ธ์!
์ด๋ฒ ํฌ์คํ ์์๋ HackerRank์ SQL Project Planning ๋ฌธ์ ๋ฅผ ํ์ด๋ณด์. ์ด๋ฒ ๋ฌธ์ ์์ ์๊ตฌํ๋ ์ฌํญ์ ํ์๊ฐ ์ง์ ์ค๋ช ํ๊ธฐ ๋ณด๋ค๋ ๋ฌธ์ ์ ์๋ณธ์ ์ฝ์ด๋ณด๋ ๊ฒ์ด ๋ ์์ํ ๊ฒ์ผ๋ก ํ๋จ๋๋ค. ๋ฌธ์ ์๋ณธ์ ์ฌ๊ธฐ๋ฅผ ํด๋ฆญํด ์ดํด๋ณด์.
ํด๋น ๋ฌธ์ ๋ฅผ ํ์ด๋ณด๋ ค๋ค๊ฐ ๊ฒฐ๊ตญ ํ์ง ๋ชปํ๊ณ Discussion์ ์ดํด๋ณด์๋๋ฐ, ๋ง์น SQL๋ฌธ์ ์ธ๋ฐ ๋ฐ์ดํฐ ์์์ ํจํด์ ๋ฐ๊ฒฌํด์ผ ํ๋ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ์ฒ๋ผ ๋๊ปด์ก๋ค.. ๋ฌธ์ ๋ฅผ ํ๊ธฐ ์ํ ์์ด๋์ด๋ ๋ค์๊ณผ ๊ฐ๋ค.
- Start_Date ์ค End_Date์๋ ์๋ Start_Date๋ ๊ฐ ์ฐ์์ ์ด์ง ์๊ณ ๊ฐ๋ณ์ ์ผ๋ก ์์ํ๋ ํ๋ก์ ํธ์ ์์๋ ์ง๋ฅผ ์๋ฏธํ๋ค.
- End_Date ์ค Start_Date์๋ ์๋ End_Date๋ ๊ฐ ์ฐ์์ ์ด์ง ์๊ณ ๊ฐ๋ณ์ ์ผ๋ก ์์ํ๋ ํ๋ก์ ํธ์ ์ข ๋ฃ๋ ์ง๋ฅผ ์๋ฏธํ๋ค.
๋ฐ๋ผ์ ์ 2๊ฐ์ง ์์ด๋์ด๋ฅผ ๋ฐ์ํ ์ฟผ๋ฆฌ๋ฌธ์ ์์ฑํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค. ์ฟผ๋ฆฌํ๋ฉด์ ์์๋ณด๊ธฐ ์ฝ๊ฒ Start_Date
๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํ ํ ์ดํด๋ณด์๋ค.
SELECT Start_Date, 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
ORDER BY Start_Date
์ ์ฒ๋ผ Start_Date
์ End_Date
๊ฐ ์๋ก JOIN ๋ ๊ฒ์ฒ๋ผ ๋์ค๋ ๊ฒ์ ๋ณผ ์ ์๋ค. ์ฌ๊ธฐ์ ์์๋ ์ง๊ฐ ์ข
๋ฃ๋ ์ง๋ณด๋ค ์์์ผ ๋๋ค๋ ์กฐ๊ฑด์ ์ถ๊ฐํด์ฃผ์ด์ ๋ค์๊ณผ ๊ฐ์ ์ฟผ๋ฆฌ๋ฌธ์ ์์ฑํ๋ค.
SELECT Start_Date, 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
๋ง์ง๋ง์ผ๋ก ์์๋ ์ง๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ทธ๋ฃนํํ๋๋ฐ, ์ด ๋ ์ข ๋ฃ๋ ์ง์ ์ต์๊ฐ์ ์ถ๋ ฅํด์ฃผ์ด์ผ ์ฐ๋ฆฌ๊ฐ ์ํ๋ ๊ฒฐ๊ณผ๊ฐ์ด ๋์ค๊ฒ ๋๋ค.
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
๊ทธ๋ฐ๋ฐ ์ฌ๊ธฐ์ ํ ๊ฐ์ง ์๋ก์ด ์ฌ์ค์ ์ป๊ฒ ๋์๋ค. MySQL 5.7๋ฒ์ ์ด์๋ถํฐ ์ถ๊ฐ๋ sql_mode
์ only_full_group_by
๋ชจ๋๋ฅผ ํด์ ํด์ฃผ๋ฉด ์์๋ ์ง๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ทธ๋ฃนํํ์์๋ ๋ถ๊ตฌํ๊ณ ์ข
๋ฃ๋ ์ง๋ฅผ ์ต์๊ฐ์ด ์๋ ๊ทธ๋ฅ End_Date
๋ก ๋ช
์ํด์ฃผ์ด๋ ์ํ๋ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํด์ค ์ ์๋ค.
-- sql_mode ๋ณ๊ฒฝ ๋ฐฉ๋ฒ
SET sql_mode ='';
SELECT Start_Date, 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(End_Date, Start_Date), Start_Date
'SQL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[SQL] SQL๋ก ์์(Prime Number) ์ถ๋ ฅํ๊ธฐ(HackerRank - Print Prime Numbers ๋ฌธ์ ) (0) | 2021.03.11 |
---|---|
[SQL] HackerRank - Placements ๋ฌธ์ (0) | 2021.03.10 |
[SQL] HackerRank - Contest Leaderboard ๋ฌธ์ (0) | 2021.03.02 |
[SQL] MySQL์์๋ ์๋๋ ํ์ด(HackerRank - The PADS ๋ฌธ์ ) (0) | 2021.02.28 |
[SQL] HackerRank - Ollivander's Inventory ๋ฌธ์ ํ์ด (5) | 2021.02.25 |