본문 바로가기

Language/SQL

[HackerRank][SQL][JOIN] Basic Join, Ollivander's Inventory - 컴도리돌이

728x90
 

Ollivander's Inventory | HackerRank

Help pick out Ron's new wand.

www.hackerrank.com


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.

 

-> non_evil인 지팡이에서 같은 나이, 같은 힘을 가진 지팡이들 중에서 가장 저렴한 지팡이를 출력하시오. 출력을 할 때는 지팡이의 힘으로 내림차순 정렬을 하고, 힘을 같을 시에는 나이를 내림차순 정렬을 하시오.


Answer

select w.id, wp.age, w.coins_needed, w.power
from wands w inner join wands_property wp on w.code = wp.code
where wp.is_evil = 0 
and w.coins_needed = (select min(w_.coins_needed)
                      from wands w_ inner join wands_property wp_ on w_.code = wp_.code
                      where wp_.is_evil = 0
                      and w_.power = w.power
                      and wp_.age = wp.age
                     )
order by w.power desc , wp.age desc

* 지팡이와 지팡이_속성 테이블을 code로 join을 한다. join을 한 후에 is_evil 이 0을 가진 지팡이 중에서 같은 나이, 같은 힘을 가진 지팡이에서 가장 min 값을 찾아야 한다. 그렇기 때문에 서브 쿼리를 하나 사용하였다. 같은 힘과 같은 나이를 가진 지팡이에서 제일 작은 가격과 같을 경우 출력하게끔 설정하였다. 정렬은 문제에서 명시한 데로 지팡이의 힘과 나이를 각각 내림차순으로 정렬시켰다.