www.hackerrank.com/challenges/harry-potter-and-wands/problem
Harry Potter and his friends are at Ollivander's with Ron, finally replacing Charlie's old broken wand.
Hermione decides the best way to choose is by determining the minimum number of gold galleons needed to buy each non-evil wand of high power and age. Write a query to print the id, age, coins_needed, and power of the wands that Ron's interested in, sorted in order of descending power. If more than one wand has same power, sort the result in order of descending age.
슬슬 어려워진다.. 단순히 join 해서 풀면 되는 줄 알았는데, 알고 보니까 각 code(=age)와 power가 같을 경우 제일 싼 지팡이만 선택해야 한다.
결국 join 해서 age와 power로 group by 해서 어떻게 해보려고 했는데 실패했다.
방법은
1. 내가 필요한 정보를 담은 커스텀 테이블을 하나 만들어서
2. 그 테이블과 join 해서
3. 각 케이스(code-power가 같은 경우)에 최솟값을 갖고 있는 데이터를 만들고
4. property 테이블과 join 해서 age를 얻은 후 정렬, 출력한다.
SELECT w.ID, P.AGE, m.coins_needed, w.power
from (SELECT code, min(coins_needed) as coins_needed, power from wands group by code, power) as m
inner join wands as w
on w.code = m.code and w.power = m.power and w.coins_needed = m.coins_needed
inner join wands_property as p
on p.code = w.code
where p.is_evil = 0
order by w.power desc, p.age desc
각 케이스별로 최소 금액을 출력하려면 group by로 code, power를 해줘야 하는데 ID가 껴있을 경우 group by 가 되지 않으므로 ID를 뺀 상태로 group by, 최소 금액을 가진 테이블을 만든다. (첫 from 안의 테이블 정의)
이후 ID값을 다시 더해주기 위해 기본 wands 테이블과 join 해주고 (첫 번째 join)
age값을 더해주기 위해서 property 테이블과 join 해준다. (두 번째 join)
이후 조건과 정렬을 해주면 된다.
'문제 풀이 > Hackerrank SQL' 카테고리의 다른 글
[Hackerrank SQL] The Report (0) | 2021.02.24 |
---|---|
[Hackerrank SQL] Average Population of Each Continent (0) | 2021.02.24 |
[Hackerrank SQL] Type of Triangle (0) | 2021.02.24 |
[Hackerrank SQL] Weather Observation Station 13 (0) | 2021.02.23 |
[Hackerrank SQL] Weather Observation Station 8 (0) | 2021.02.23 |