홍동이의 성장일기
[HackerRank] Ollivander's Inventory 본문
※ 윈도우 함수를 사용할 때는 DB를 MS SQL Server로 변경해주어야 합니다.
SELECT id
, age
, coins_needed
, power
FROM (
SELECT w.code
, w.id
, wp.age
, w.coins_needed
, w.power
, ROW_NUMBER() OVER(PARTITION BY wp.age, w.power ORDER BY w.coins_needed) as num
FROM wands AS w
LEFT JOIN wands_property AS wp ON w.code = wp.code
WHERE is_evil = 0
) as t
WHERE num = 1
ORDER BY power DESC, age DESC
💡 문제풀이
SELECT w.code
, w.id
, wp.age
, w.coins_needed
, w.power
FROM wands AS w
LEFT JOIN wands_property AS wp
ON w.code = wp.code
WHERE is_evil = 0
AND w.code = 1
ORDER BY w.power DESC, w.coins_needed DESC
age를 함께 나타내주기 위해 wands와 wands_property 테이블을 조인해줍니다. 필요한 컬럼들을 가져와줍니다. WHERE절을 통해 is_evil이 0이라는 조건을 지정해줍니다. 과정을 직관적으로 보기 위해 code가 1인 행만 살펴보겠습니다.
SELECT w.code
, w.id
, wp.age
, w.coins_needed
, w.power
, ROW_NUMBER() OVER(PARTITION BY wp.age, w.power ORDER BY w.coins_needed) as num
FROM wands AS w
LEFT JOIN wands_property AS wp ON w.code = wp.code
WHERE is_evil = 0
AND w.code = 1
ORDER BY w.power DESC, w.coins_needed DESC
윈도우 함수 ROW_NUMBER을 사용하여 age, power 별로 coins_needed에 따른 순위를 부여합니다. power이 1인 지팡이가 2개 있으므로 coins_needed가 적은 순서대로 순위가 부여되었습니다. 우리는 power가 같은 경우 가장 저렴한 지팡이만 출력해주면 됩니다.
SELECT id
, age
, coins_needed
, power
FROM (
SELECT w.code
, w.id
, wp.age
, w.coins_needed
, w.power
, ROW_NUMBER() OVER(PARTITION BY wp.age, w.power ORDER BY w.coins_needed) as num
FROM wands AS w
LEFT JOIN wands_property AS wp ON w.code = wp.code
WHERE is_evil = 0
AND w.code = 1
) as t
WHERE num = 1
ORDER BY power DESC, age DESC
서브쿼리 안에 정렬조건을 넣으니 오류가 나서 바깥으로 빼주었습니다. power가 1인 지팡이가 하나만 출력됨으로써 우리가 원하는대로 결과가 잘 나오는 것을 확인할 수 있습니다.
서브쿼리 WHERE절에서 w.code = 1부분을 제거해주면 전체 테이블에 대한 결과를 얻을 수 있습니다.
📍본 내용은 '[백문이불여일타] 데이터 분석을 위한 고급 SQL 문제풀이'를 수강하며 작성한 내용입니다.
728x90
'Tool > SQL 코딩테스트 풀이' 카테고리의 다른 글
[HackerRank] Weather Observation Station 20 (0) | 2023.10.13 |
---|---|
[HackerRank] Weather Observation Station 11 (0) | 2023.10.13 |
[HackerRank] SQL Project Planning (1) | 2023.10.12 |
[Hacker Rank] Binary Tree Nodes / [LeetCode] 608. Tree Node (1) | 2023.10.12 |
[HackerRank] Weather Observation Station 5 (0) | 2023.10.02 |
Comments