출처
문제
아이템의 희귀도가 'RARE'인 아이템들의 모든 다음 업그레이드 아이템의 아이템 ID(ITEM_ID), 아이템 명(ITEM_NAME), 아이템의 희귀도(RARITY)를 출력하는 SQL 문을 작성해 주세요. 이때 결과는 아이템 ID를 기준으로 내림차순 정렬주세요.
문제에 대한 해석
-- 조회 : 아이템 ID(ITEM_ID), 아이템 명(ITEM_NAME), 아이템의 희귀도(RARITY)
-- 조건 : 'RARE'인 아이템들의 모든 다음 업그레이드
-- 정렬 : 아이템 ID를 기준으로 내림차순
풀이(MYSQL)
with parent as (
select i.item_id
from ITEM_INFO i
join ITEM_TREE t
on i.item_id = t.item_id
where i.rarity = 'RARE'
) -- 희귀도가 rare인 아이템(원조parent)
select i.item_id, i.item_name, i.rarity
from ITEM_INFO i
join ITEM_TREE t
on i.item_id = t.item_id
where t.parent_item_id in (select item_id
from parent)
order by i.item_id desc
작동순서
💡SQL 실행 순서는 From -> Where -> Group by -> Having -> Select -> Order by ->결과반환
- WITH 절: ITEM_INFO와 ITEM_INFO를 조인하여 희귀도가 rare인 item의 테이블을 만든다(parent)
- FROM 절: ITEM_INFO와 ITEM_INFO를 조인하여
- WHERE 절: 각 아이템의 부모아이템( parent_item_id)이 parent테이블에 있을 경우 필터링 하여
- SELECT 절: i.item_id, i.item_name, i.rarity를 조회한다
- ORDER BY 절: i.item_id 내림차순 순으로
배운점
요구조건 잘보기
- A -> B -> C로 진화할 경우 다음의 업그레이드는 B,C가 조회된다
- 또 B -> D로도 진화가 가능할 경우 D도 조건에 충족
- 이때 root아이템을 찾고자 parent_item_id is null 의 조건을 부여하면 B는 출력되지 않으므로
- root아이템을 찾는 것이 아닌 최초 진화의 다음단계를 조회하는 쿼리를 작성해야 한다
'문제풀이 > SQL(My sql)' 카테고리의 다른 글
[문제풀이] Hacker Rank - Contest Leaderboard (0) | 2024.06.13 |
---|---|
[문제풀이] Hacker Rank - Ollivander's Inventory (0) | 2024.06.12 |
[문제풀이] Hacker Rank - Top Competitors (0) | 2024.06.11 |
[문제풀이] Hacker Rank - THE REPORT (0) | 2024.06.11 |
[문제풀이] Hacker Rank - Weather Observation Station 20 (0) | 2024.06.10 |