[HackerRank] Ollivander's Inventory

joon_1592·2022년 4월 29일
0

SQL

목록 보기
10/11

Basic Join인데 1시간 헤매고 구글링해서 풀었다.
프로그래머스보다 어려웠다고 생각한다

도움받은 스택오버플로우 링크

  1. 보고싶은 컬럼은 id, age, coins_needed, power
  2. is_evil = 0
  3. (age, power)가 같은 wand 중에서 coins_needed의 최솟값을 고른다
    3.1 GROUP BY를 이용!
  4. 정렬조건
    4.1power 내림차순
    4.2power가 같다면 age 내림차순

조건2, 3을 만족하는 T라는 임시테이블을 만들고, TWands를 조인하여 컬럼을 조회한다.

select Wands.id, T.age, T.min_coins, T.power
from (
    select WP.code as code, WP.age as age, W.power as power, min(W.coins_needed) as min_coins
    from Wands as W join Wands_Property as WP on W.code = WP.code
    where WP.is_evil = 0
    group by WP.code, WP.age, W.power
) as T join Wands on T.code = Wands.code and T.min_coins = Wands.coins_needed

order by T.power desc, T.age desc
profile
공부용 벨로그

0개의 댓글