๐ ๋ณธ ํฌ์คํ ์์ ์ฌ์ฉ๋๋ ํ ์ด๋ธ์ ์๋ฃ์ ์ถ์ฒ๋ HackerRank ์์ ๋ฐํ๋๋ค. ๋ ๋ค์ํ SQL ๋ฌธ์ ๋ฅผ ํ์ด๋ณด์๋ ค๋ฉด HackerRank ์ฌ์ดํธ๋ฅผ ๋ฐฉ๋ฌธํด ๋ณด์ธ์!
์ด๋ฒ ํฌ์คํ ์์๋ HackerRank์ Placements ๋ฌธ์ ๋ฅผ ํ์ด๋ณด๋ ค๊ณ ํ๋ค. ๋ฌธ์ ์๋ณธ์ ์ฌ๊ธฐ๋ฅผ ํด๋ฆญํด ํ์ธํด๋ณด์. ๋ค๋ฅธ ๋ฌธ์ ๋ค ๋ณด๋ค๋ ์์ํ๊ฒ ํด๊ฒฐํ๊ธฐ ๋๋ฌธ์ ๋ฌธ์ ํ์ด์ ํ์ฉํ ์์ด๋์ด์ ์ ๋ต SQL ๊ตฌ๋ฌธ๋ง ์ ์ํ๊ณ ๊ฐ๋จํ๊ฒ ํฌ์คํ ์ ๋ง์น๋ ค ํ๋ค. ๋ฌธ์ ์์ ์๊ตฌํ๋ ์ฌํญ์ ๋ค์๊ณผ ๊ฐ๋ค.
Write a query to output the names of those students whose best friends got offered a higher salary than them. Names must be ordered by the salary amount offered to the best friends. It is guaranteed that no two students got same salary offer.
(์์ ์ ์น๊ตฌ(๋ฒ ์คํธ ํ๋ ๋)๊ฐ ์์ ๋ณด๋ค ๋ ๋์ Salary๋ฅผ ๋ฐ์ ํ์๋ค(์์ ๋ค)์ ์ด๋ฆ์ ์ถ๋ ฅํด๋ผ. ์ด ๋ ์์ ์ ๋ฒ ์คํธ ํ๋ ๋๊ฐ ๋ฐ๋ Salary๋ฅผ ์ค๋ฆ์ฐจ์ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํด๋ผ. ๋จ, ๋์ผํ ๊ฐ์ผ๋ก Salary๊ฐ ์ ๊ณต๋ ์ ์ ์๋ค.(์ค๋ณต๋ ๊ฐ์ ์๋ค๋ ์๋ฏธ)
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์๋ ๋ค์๊ณผ ๊ฐ์ ์์ด๋์ด๋ฅผ ํ์ฉํด ํด๊ฒฐํ๋ค.
- ํ๋์ row์ ์์ ์
Salary
, ์์ ์ ์น๊ตฌ(๋ฒ ์คํธ ํ๋ ๋)์Salary
๊ฐ ๋ชจ๋ ๋์์ผ ํ๋ฏ๋กINNER JOIN
๋๋ ์๋ธ์ฟผ๋ฆฌ๋ฅผ ํ์ฉํด๋ณด์. Salary
๊ฐ์ด ๋ด๊ธด ํ ์ด๋ธ๊ณผINNER JOIN
์ ์ํฌ ๋ ์กฐ์ธ ๊ธฐ์ค ์นผ๋ผ์ธ ID๋ฅผ ํ ๋ฒ์ '์์ ์ ID', ํ ๋ฒ์ '์น๊ตฌ์ ID' ๊ธฐ์ค์ผ๋ก ํ์.
์ 2๊ฐ์ ์์ด๋์ด๋ฅผ ํ์ฉํ SQL ๊ตฌ๋ฌธ ์ ๋ต์ ๋ค์๊ณผ ๊ฐ๋ค.
SELECT sub.Name
FROM (SELECT f.ID, s.Name, f.Friend_ID, p.Salary AS me_Salary
FROM Students s
INNER JOIN Friends f ON s.ID = f.ID
INNER JOIN Packages p ON f.ID = p.ID) sub
INNER JOIN Packages p ON sub.Friend_ID = p.ID
WHERE sub.me_Salary < p.Salary
ORDER BY p.Salary
์ต๊ทผ์ SQL Medium ๋์ด๋๋ฅผ ํ ๋ Basic ๋์ด๋ ๋์๋ ๋ค๋ฅธ ์ ์ ํญ์ ๋น ๋ฐฑ์ง์ ํ
์ด๋ธ ์นผ๋ผ์ ์์ฑํด ๋๊ณ ํด๊ฒฐ์ฑ
์ ๊ณ ์ํด๋ด๋ ๊ฒ์ด ๋ ํธํ๋ค. ๊ทธ๋์ ๋จธ๋ฆฟ์์ผ๋ก๋ง ์์ํด์ ํ๋ คํ๋๋ฐ ์๋ธ์ฟผ๋ฆฌ๋ JOIN
๊ตฌ๋ฌธ์ด 2๊ฐ ์ด์ ๋ค์ด๊ฐ์ผ ํ๋ ๊ตฌ๋ฌธ์ ์์ผ๋ก ์ง์ ์จ๋ณด๋ ๊ฒ์ด ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์์ํ๋ ๊ฒ ๊ฐ๋ค.