SQL Study/Programmers

프로그래머스[Lv.2] 업그레이드 된 아이템 구하기

choidawon 2025. 11. 24. 10:10

문제설명

아이템의 희귀도가 'RARE'인 아이템들의 모든 다음 업그레이드 아이템의 아이템 ID(ITEM_ID), 아이템 명(ITEM_NAME), 아이템의 희귀도(RARITY)를 출력하는 SQL 문을 작성해 주세요. 이때 결과는 아이템 ID를 기준으로 내림차순 정렬주세요.

 

ITEM_INFO 테이블

ITEM_ID ITEM _NAME RARITY PRICE
0 ITEM_A RARE 10000
1 ITEM_B RARE 9000
2 ITEM_C LEGEND 11000
3 ITEM_D RARE 10000
4 ITEM_E RARE 12000

 

ITEM_TREE 테이블

ITEM_ID PARENT_ITEM_ID
0 NULL
1 0
2 0
3 1
4 1

 

아이템의 희귀도가 'RARE'인 아이템은 'ITEM_A', 'ITEM_B', 'ITEM_D', 'ITEM_E' 입니다.
이 중 'ITEM_A' 는 'ITEM_B', 'ITEM_C' 로 업그레이드가 가능하며 'ITEM_B' 는 'ITEM_D' , 'ITEM_E' 로 업그레이드가 가능합니다. 'ITEM_D' 와 'ITEM_E'는 더 이상 업그레이드가 가능하지 않습니다. 따라서 결과는 다음과 같이 나와야 합니다.

ITEM_ID ITEM _NAME RARITY
4 ITEM_E RARE
3 ITEM_D RARE
2 ITEM_C LEGEND
1 ITEM_B RARE

 

코드설명

문제의 요구사항은 단순히 부모가 있는 아이템을 찾는 것이 아니라

부모 아이템의 희귀도가 RARE인 경우의 자식 아이템을 찾는 것

즉, 부모 아이템의 RARITY 조건이 중요

 

부모 아이템 ID가 RARE 등급인 아이템만 필터링하겠다는 의미

그래서 ITEM_TREE 에서 PARENT_ITEM_ID 가 NULL이 아니어도
RARE가 아닌 부모를 가진 자식은 제외

 

코드

SELECT F.ITEM_ID, F.ITEM_NAME, F.RARITY
FROM ITEM_INFO F
JOIN ITEM_TREE T ON F.ITEM_ID = T.ITEM_ID
WHERE T.PARENT_ITEM_ID IN(
SELECT ITEM_ID
FROM ITEM_INFO
WHERE RARITY = 'RARE'
)
ORDER BY F.ITEM_ID DESC