문제 사이트
아래 문제는 해커랭크에서 추출해온 문제입니다. 문제의 저작권은 해커랭크에 있으며 문제를 풀어보시려면 아래 링크를 클릭해주세요 🙂
Ollivander's Inventory | HackerRank
Help pick out Ron's new wand.
www.hackerrank.com
👉문제 설명
- Non-evil의 지팡이를 구매
- power, age 별 coins_needed가 최소인 행
- 힘과 나이 순서대로 내림차순 정렬


👉문제 풀이 과정
1. Non-evil이면서 power, age별 가장 낮은 coins_needed 찾기
SELECT w2.power, wp2.age, MIN(w2.coins_needed) AS min_coins
FROM Wands w2
JOIN Wands_Property wp2 ON w2.code = wp2.code
WHERE wp2.is_evil = 0
GROUP BY w2.power, wp2.age
) AS min_wands
- 조건에 해당하는 행 중에서 가장 낮은 값을 찾아야 하므로 서브쿼리와 join 활용해야 함!

power, age 별 최저 coins_needed가 출력됨
2. id 값도 함께 나올 수 있도록 join
SELECT w.id, wp.age, w.coins_needed, w.power
FROM Wands w
JOIN Wands_Property wp ON w.code = wp.code
JOIN (
SELECT w2.power, wp2.age, MIN(w2.coins_needed) AS min_coins
FROM Wands w2
JOIN Wands_Property wp2 ON w2.code = wp2.code
WHERE wp2.is_evil = 0
GROUP BY w2.power, wp2.age
) AS min_wands ON w.power = min_wands.power
AND wp.age = min_wands.age
AND w.coins_needed = min_wands.min_coins
WHERE wp.is_evil = 0
3. 정렬 조건
ORDER BY w.power DESC, wp.age DESC
👉최종 답안
SELECT w.id, wp.age, w.coins_needed, w.power
FROM Wands w
JOIN Wands_Property wp ON w.code = wp.code
JOIN (
SELECT w2.power, wp2.age, MIN(w2.coins_needed) AS min_coins
FROM Wands w2
JOIN Wands_Property wp2 ON w2.code = wp2.code
WHERE wp2.is_evil = 0
GROUP BY w2.power, wp2.age
) AS min_wands ON w.power = min_wands.power
AND wp.age = min_wands.age
AND w.coins_needed = min_wands.min_coins
WHERE wp.is_evil = 0
ORDER BY w.power DESC, wp.age DESC;

👉고찰
서브쿼리 사용하는 방법에 대해 좀 더 공부해야 할 거 같다
언제 서브쿼리를 사용해야 하고 어떻게 써야 하는지 잘 모르는 거 같음
'SQL > MySQL' 카테고리의 다른 글
프로그래머스 LV 1. 오랜 기간 보호한 동물(2), DATEDIFF 함수 (0) | 2025.04.07 |
---|---|
프로그래머스 LV1. 중성화 여부 파악하기, 다양한 코드 구현 방법 (0) | 2025.04.07 |
[MySQL] HackerRank - The Report 문제 풀이 (0) | 2025.03.24 |
[MySQL] HackerRank - Weather Observation Station 20 문제 풀이 (0) | 2025.03.19 |
[MySQL] HackerRank - Top Competitors 문제 풀이 (0) | 2025.03.13 |