본문 바로가기
SQL

[SQL] HackerRank - Ollivander's Inventory

by 다람이도토리 2021. 6. 8.

문제링크

https://www.hackerrank.com/challenges/harry-potter-and-wands/problem

 

Ollivander's Inventory | HackerRank

Help pick out Ron's new wand.

www.hackerrank.com

 

풀이방법

해당 문제의 경우는 복잡한데 다음과 같다.

- is evil이 아닌 완드 중에서

- (power과 age가 같은 완드 중에서) 돈이 가장 적게 드는 완드를

- power를 descending한 순서로, 동률일 경우 age가 descending한 순서로 정렬하시오.

데이터 프레임이 두 개로 나눠져있고, code가 동일해서 두 테이블을 join해야 하는 것은 문제이다. 그런데, power과 age가 같은 완드 중에서 돈이 가장 적게 드는 완드는 따로 한 번 뽑아 봐야 하는데, 어떻게 해야할까?

이를 위해서, 서브쿼리를 사용하면 된다. 즉 쿼리문 하나 안에, 다른 쿼리를 넣어서 데이터를 한번 더 추출시키면 된다.

SELECT WANDS.ID, WANDS_PROPERTY.AGE, WANDS.COINS_NEEDED, WANDS.POWER
FROM WANDS JOIN WANDS_PROPERTY ON WANDS.CODE = WANDS_PROPERTY.CODE
WHERE WANDS_PROPERTY.IS_EVIL = 0
AND WANDS.COINS_NEEDED = (SELECT MIN(W1.COINS_NEEDED)
                          FROM WANDS AS W1
                          INNER JOIN WANDS_PROPERTY P1 ON W1.CODE = P1.CODE
                          WHERE P1.IS_EVIL = 0
                          AND W1.POWER = WANDS.POWER
                          AND P1.AGE = WANDS_PROPERTY.AGE)
ORDER BY WANDS.POWER DESC, WANDS_PROPERTY.AGE DESC

'SQL' 카테고리의 다른 글

[DB] Key 정리  (0) 2021.08.18
[SQL] Having 절  (0) 2021.07.05
[SQL] HackerRank - The Report  (0) 2021.06.08
[SQL] JOIN의 종류와 예시  (0) 2021.06.08
[SQL] HackerRank - Population Census  (0) 2021.06.04