https://www.hackerrank.com/challenges/harry-potter-and-wands/problem?isFullScreen=true
Column | Type |
id | Integer |
code | Integer |
coin_needed | Integer |
power | Integer |
Wands 테이블:
- id : 지팡이의 id
- code : 지팡이의 코드
- coin_needed : 지팡이의 비용
- power : 지팡이의 품질
Column | Type |
code | Integer |
age | Integer |
is_evil | Integer |
Wands_Property 테이블:
- code : 지팡이의 코드
- age : 지팡이의 연식
- is_evil : 어둠의 마법 친화도
해리 포터와 그의 친구들은 론과 함께 찰리의 오래된 부러진 지팡이를 교체하기 위해 올리밴더의 가게에 와 있습니다.
헤르미온느는 높은 힘과 나이를 가진 악하지 않은 지팡이를 사기 위해 필요한 최소한의 금 갈레온 수를 결정하는 것이 가장 좋은 방법이라고 생각합니다. 론이 관심 있는 지팡이의 id, age, coins_needed, power를 출력하는 쿼리를 작성하세요. 결과는 힘의 내림차순으로 정렬하고, 힘이 같은 경우 나이의 내림차순으로 정렬합니다.
select *
from Wands w
left join Wands_Property wp on w.code = wp.code
먼저 지팡이의 코드에 따라 나이, 어둠의 마법 친화도를 함께 출력하도록한다.
select
wp.age,
min(w.coins_needed),
w.power
from Wands w
left join Wands_Property wp on w.code = wp.code
group by w.id, wp.age, w.power
지팡이들의 나이, 품질별로 가장 저렴한 품목만 출력하도록 한다.
select
w.id,
wp.age,
w.coins_needed,
w.power
from Wands w
left join Wands_Property wp on w.code = wp.code
where (wp.age, w.coins_needed, w.power) in
(select
wp.age,
min(w.coins_needed),
w.power
from Wands w
left join Wands_Property wp on w.code = wp.code
group by wp.age, w.power)
위의 쿼리를 조건으로 해서 조건에 맞는 항목들만 출력하도록 한다. ONLY_FULL_GROUP_BY 때문으로 group by를 한 열만 select에서 출력할 수 있기 때문에 group by를 하지 않은 w.id 열을 출력하기 위함이다.
select
w.id,
wp.age,
w.coins_needed,
w.power
from Wands w
left join Wands_Property wp on w.code = wp.code
where wp.is_evil = 0
and (wp.age, w.coins_needed, w.power) in
(select
wp.age,
min(w.coins_needed),
w.power
from Wands w
left join Wands_Property wp on w.code = wp.code
group by wp.age, w.power)
where 절에 조건을 추가한다. 악하지 않은 지팡이만 출력해야하므로 wp.is_evil = 0인 지팡이들만 골라낸다.
select
w.id,
wp.age,
w.coins_needed,
w.power
from Wands w
left join Wands_Property wp on w.code = wp.code
where wp.is_evil = 0
and (wp.age, w.coins_needed, w.power) in
(select
wp.age,
min(w.coins_needed),
w.power
from Wands w
left join Wands_Property wp on w.code = wp.code
group by wp.age, w.power)
order by w.power desc, wp.age desc
마지막으로 주어진 조건에 맞게 정렬하면 완료!
ONLY_FULL_GROUP_BY 때문에 서브쿼리를 하나 더 작성해야해서 시간이 조금 걸렸다.
'코딩일기' 카테고리의 다른 글
SQL 코드카타 174 - Challenges (0) | 2024.07.26 |
---|---|
알고리즘 코드카타 117 - 마법의 엘리베이터 (0) | 2024.07.25 |
알고리즘 코드카타 116 - 점찍기 (4) | 2024.07.24 |
SQL 코드카타 172 - Top Competitors (2) | 2024.07.24 |
알고리즘 코드카타 115 - 호텔 대실 (2) | 2024.07.23 |