문제설명
아이템의 희귀도가 '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'SQL Study > Programmers' 카테고리의 다른 글
| 프로그래머스[Lv.3] 조건에 맞는 사용자 정보 조회하기 (0) | 2025.11.25 |
|---|---|
| 프로그래머스[Lv.3] 대여 기록이 존재하는 자동차 리스트 구하기 (0) | 2025.11.25 |
| 프로그래머스[Lv.1] 경기도에 위치한 식품창고 목록 출력하기 (0) | 2025.11.21 |
| 프로그래머스[Lv.1] 어린 동물 찾기 (0) | 2025.11.21 |
| 프로그래머스[Lv.1] 아픈 동물 찾기 (0) | 2025.11.21 |