๋ด ๋ต์๋งํผ ๋ณต์กํ ์ฟผ๋ฆฌ๊ฐ ํ์ํ ๋ฌธ์ ๊ฐ ์๋์์ง๋ง ์ผ๋จ ๊ธฐ๋ก!
์ด๋ ๊ฒ ์ธ ํ ์ด๋ธ์ด ์๋ค
Friends ํ ์ด๋ธ์ด ๋์๊ฒ ๋ง์ฝ์ด์๋ค. ๋ ์ด์ด ๋ค id์ปฌ๋ผ์ด๋ค. ์กฐ์ธ์ ํ ๋ Student.id = Friends.id ๋ก ํด์ผํ๋๋ฐ ๊ทธ๋ผ Friends.friend_id๋ฅผ ์ด์ฉํด์ ์น๊ตฌ์ด๋ฆ์ ์ด๋ป๊ฒ ๋ถ์ด์ง? ๊ณ ๋ฏผํ๋ค. (๊ทธ๋ฐ๋ฐ ํ ํ์ ์์๋ค ๋ฌธ์ ๋ฅผ ๋์ถฉ์ฝ์๋๋ณด๋ค)
์น๊ตฌ์ด๋ฆ์ ์๊ธฐ ์ํด์ ์์ ์กฐ์ธ์ ์ธ๋ผ์ธ๋ทฐ๋ก ๋ฃ๊ณ ๊ทธ๋ค์์ ๋ฐ์์ ๋ค๋ฅธ ์กฐ์ธ์ ํด์ผํ๋ค.
-- ์๋ธ์ฟผ๋ฆฌ
SELECT s.id AS id
, s.name AS name
, f.friend_id AS friend_id
, p.salary AS salary
FROM Students s
JOIN Friends f ON s.id = f.id
JOIN Packages p ON s.id = p.id
์ด๋ ๊ฒ ํ์์ ์์ด๋, ํ์์ ์ด๋ฆ, ํ์์น๊ตฌ์ ์์ด๋, ํ์ ๋ณธ์ธ์ ๊ธ์ฌ๊ฐ ๋ค์ด๊ฐ ํ ์ด๋ธ์ ๋ง๋ ๋ค
์ด๊ฑธ FROM์ ์ธ๋ผ์ธ๋ทฐ๋ก ์ธ๊ฑฐ๋ค
-- ๋ต์์ฟผ๋ฆฌ
SELECT sub.name
FROM (
SELECT s.id AS id, s.name AS name, f.friend_id AS friend_id, p.salary AS salary
FROM Students s
JOIN Friends f ON s.id = f.id
JOIN Packages p ON s.id = p.id) sub
JOIN Students s2 ON sub.friend_id = s2.id
JOIN Packages p2 ON sub.friend_id = p2.id
WHERE sub.salary < p2.salary
ORDER BY p2.salary
๋ฐ์์๋ ์์์ ํ๋ ์กฐ์ธ์์ ํ์์์ด๋ ๊ธฐ์ค์ผ๋ก ํ๋๊ฑธ ์น๊ตฌ์์ด๋ ๊ธฐ์ค์ผ๋ก ์๋กญ๊ฒ ํด์ค๋ค
์ด๋ ๊ฒ ์น๊ตฌ๊ด๋ จ ์ ๋ณด๊น์ง ์ฐ๊ฒฐํ๋ค
๋ฌธ์ ์์ ์๊ตฌํ๋๋ก WHERE์ ๊ณผ SELECT์ ๊ณผ ORDER BY์ ์ ์ฐ๊ณ ํต๊ณผํ๋ค
๊ทธ๋ฐ๋ฐ ๋ ๋ฌธ์ ๋ฅผ ๋์ถฉ ์ฝ์๊ฑด์ง ์น๊ตฌ์ ์ด๋ฆ๊ณผ ์น๊ตฌ์ ์๋ฌ๋ฆฌ๊ฐ ํจ๊ป ๋ณด์ฌ์ผ ํ๋ค๊ณ ์๊ฐํ๋?
๋ง์ฝ ๋ฌธ์ ๊ฐ ๊ทธ๋ฌ๋ค๋ฉด ๋์ฒ๋ผ ํ๋ฉด ๋์ง๋ง
๋ฌธ์ ์์ ๊ทธ๋ฅ ํ์๋ณธ์ธ์ ์ด๋ฆ์ ์ต์ข ์ ์ถํ๋ฉด ๋๊ธฐ์ ํจ ๊ฐ๋จํ ์ฟผ๋ฆฌ๋ก ํ ์ ์๋ค
-- ์ต๋ค๋ํ์ฟผ๋ฆฌ
SELECT s.name
FROM Students s
JOIN Friends F ON s.id = f.id
JOIN Packages p1 ON s.id = p1.id
JOIN Packages p2 ON f.friend_id = p2.id
WHERE p2.salary > p1.salary
ORDER BY p2.salary
์ด๋ ๊ฒ p1๊ณผ p2๋ก JOINํ๋ฉด ๋๋ค
์ธ๋ผ์ธ๋ทฐ ๋ฐ๋ก ์ํด๋ ๋๋ค
๋ฌธ์ ๊ฐ ๋ง์ฝ ๋ ์ฌํ๋ฒ์ ์ด๋ผ ๋ณธ์ธ์ด๋ฆ, ๋ณธ์ธ ๊ธ์ฌ, ์น๊ตฌ์ด๋ฆ, ์น๊ตฌ๊ธ์ฌ ๋ฑ์ด ๋ค ๋์์ ๋ณด์ด๊ฒ ํ๋ผ๊ณ ํ๋ค๋ฉด ๊ทธ๋ ๋๊ฐ์ ์ฟผ๋ฆฌ๋ฅผ ์ฐ๋ฉด ๋๋ค
'๐ฌ MySQL > HackerRank ํ์ด' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[HackerRank] Top Competitors (Medium) (1) | 2022.10.11 |
---|---|
[HackerRank] Contest Leaderboard (Medium) (1) | 2022.10.11 |
[HackerRank] Binary Tree Nodes (Medium) (1) | 2022.09.26 |
[HackerRank] Occupations (Medium) (0) | 2022.09.20 |
[HackerRank] The Blunder (Easy) (0) | 2022.09.16 |
๋๊ธ