๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

SQL

[SQL] HackerRank - Placements ๋ฌธ์ œ

๋ฐ˜์‘ํ˜•

๐Ÿ”Š ๋ณธ ํฌ์ŠคํŒ…์—์„œ ์‚ฌ์šฉ๋˜๋Š” ํ…Œ์ด๋ธ”์˜ ์ž๋ฃŒ์™€ ์ถœ์ฒ˜๋Š” HackerRank ์ž„์„ ๋ฐํž™๋‹ˆ๋‹ค. ๋” ๋‹ค์–‘ํ•œ SQL ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋ณด์‹œ๋ ค๋ฉด HackerRank ์‚ฌ์ดํŠธ๋ฅผ ๋ฐฉ๋ฌธํ•ด ๋ณด์„ธ์š”!

 

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๊ฐ€ ์ œ๊ณต๋œ ์ ์€ ์—†๋‹ค.(์ค‘๋ณต๋œ ๊ฐ’์€ ์—†๋‹ค๋Š” ์˜๋ฏธ)

 

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์•„์ด๋””์–ด๋ฅผ ํ™œ์šฉํ•ด ํ•ด๊ฒฐํ–ˆ๋‹ค.

 

  1. ํ•˜๋‚˜์˜ row์— ์ž์‹ ์˜ Salary, ์ž์‹ ์˜ ์นœ๊ตฌ(๋ฒ ์ŠคํŠธ ํ”„๋ Œ๋“œ)์˜ Salary๊ฐ€ ๋ชจ๋‘ ๋‚˜์™€์•ผ ํ•˜๋ฏ€๋กœ INNER JOIN ๋˜๋Š” ์„œ๋ธŒ์ฟผ๋ฆฌ๋ฅผ ํ™œ์šฉํ•ด๋ณด์ž.
  2. 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๊ฐœ ์ด์ƒ ๋“ค์–ด๊ฐ€์•ผ ํ•˜๋Š” ๊ตฌ๋ฌธ์€ ์†์œผ๋กœ ์ง์ ‘ ์จ๋ณด๋Š” ๊ฒƒ์ด ๋” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์ˆ˜์›”ํ–ˆ๋˜ ๊ฒƒ ๊ฐ™๋‹ค.

๋ฐ˜์‘ํ˜•