๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿฌ MySQL/HackerRank ํ’€์ด

[HackerRank] Placements (Medium)

by Chloe._. 2022. 9. 28.

๋‚ด ๋‹ต์•ˆ๋งŒํผ ๋ณต์žกํ•œ ์ฟผ๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ์—ˆ์ง€๋งŒ ์ผ๋‹จ ๊ธฐ๋ก!

์ด๋ ‡๊ฒŒ ์„ธ ํ…Œ์ด๋ธ”์ด ์žˆ๋‹ค

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

๋Œ“๊ธ€