문제링크
https://www.hackerrank.com/challenges/harry-potter-and-wands/problem
풀이방법
해당 문제의 경우는 복잡한데 다음과 같다.
- 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 |