[Lv.2 / Programmers / SQL] 업그레이드 된 아이템 구하기

송현진·2025년 3월 19일

SQL

목록 보기
15/17

업그레이드 된 아이템 구하기

문제 설명

어느 한 게임에서 사용되는 아이템들은 업그레이드가 가능합니다.
'ITEM_A'->'ITEM_B'와 같이 업그레이드가 가능할 때
'ITEM_A'를 'ITEM_B' 의 PARENT 아이템,
PARENT 아이템이 없는 아이템을 ROOT 아이템이라고 합니다.

예를 들어 'ITEM_A'->'ITEM_B'->'ITEM_C'와 같이 업그레이드가 가능한 아이템이 있다면
'ITEM_C'의 PARENT 아이템은 'ITEM_B'
'ITEM_B'의 PARENT 아이템은 'ITEM_A'
ROOT 아이템은 'ITEM_A'가 됩니다.

다음은 해당 게임에서 사용되는 아이템 정보를 담은 ITEM_INFO 테이블과 아이템 관계를 나타낸 ITEM_TREE 테이블입니다. ITEM_INFO 테이블은 다음과 같으며, ITEM_ID, ITEM_NAME, RARITY, PRICE는 각각 아이템 ID, 아이템 명, 아이템의 희귀도, 아이템의 가격을 나타냅니다.

ITEM_TREE 테이블은 다음과 같으며, ITEM_ID, PARENT_ITEM_ID는 각각 아이템 ID, PARENT 아이템의 ID를 나타냅니다.

단, 각 아이템들은 오직 하나의 PARENT 아이템 ID를 가지며, ROOT 아이템의 PARENT 아이템 ID는 NULL 입니다.

ROOT 아이템이 없는 경우는 존재하지 않습니다.

문제

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

예시

출력

ITEM_IDITEM_NAMERARITY
4ITEM_ERARE
3ITEM_DRARE
2ITEM_CLEGEND
1ITEM_BRARE

풀이

  1. PARENT_ITEM_ID 아이디를 구하기 위해 ITEM_INFO와 ITEM_TREE 조인
  2. RARITY가 RARE인 것만 추출
  • PARENT_ITEM_ID에 추출한 ITEM_ID가 있으면 출력하기 위함
  1. ITEM_ID을 내림차순 정렬
SELECT A.ITEM_ID, A.ITEM_NAME, A.RARITY
FROM ITEM_INFO A
JOIN ITEM_TREE B
ON A.ITEM_ID = B.ITEM_ID
WHERE B.PARENT_ITEM_ID IN (
            SELECT ITEM_ID
            FROM ITEM_INFO
            WHERE RARITY = 'RARE'
                          )
ORDER BY ITEM_ID DESC;
profile
개발자가 되고 싶은 취준생

0개의 댓글