2026. 5. 19. 11:56ㆍ프로그래머스 SQL
문제 설명
어느 한 게임에서 사용되는 아이템들은 업그레이드가 가능합니다.
'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 아이템이 없는 경우는 존재하지 않습니다.
문제
더 이상 업그레이드할 수 없는 아이템의 아이템 ID(ITEM_ID), 아이템 명(ITEM_NAME), 아이템의 희귀도(RARITY)를 출력하는 SQL 문을 작성해 주세요. 이때 결과는 아이템 ID를 기준으로 내림차순 정렬해 주세요.
문제 파악
1. 더이상 업그레이드 할 수 없다 = 어떤 아이템이 부모(PARENT_ITEM_ID) 역할을 하고 있다면, 그 아이템은 업그레이드 가능
= PARENT_ITEM_ID 리스트에 한 번도 등장하지 않는 ITEM_ID 가 더이상 업그레이드 할 수 없는 아이템
2. 부모 아이템 ID 목록 구하기 = ITEM_TREE에서 PARENT_ITEM_ID들을 서브쿼리로 추출 (NULL 값 제외 필수)
3. 메인 쿼리에서 아이템 ID 가 위에서 구한 부모 ID 리스트에 포함되지 않는(NOT IN) 데이터만 필터링
4. 내림차순 정렬
해결 과정
1. SELECT II.ITEM_ID, II.ITEM_NAME, II.RARITY
= 아이템 ID , 아이템 명 , 희귀도를 선택 테이블 이름 길어서 II 라는 별칭 붙임
2. FROM ITEM_INFO II WHERE II.ITEM_ID NOT IN (...)
= ITEM_INFO 테이블에서 데이터를 추출하지만 NOT IN(속하지 않는 아이템 ID 만 추출)
3. (SELECT PARENT_ITEM_ID FROM ITEM_TREE WHERE PARENT_ITEM_ID IS NOT NULL)
= ITEM_TREE 테이블에서 다른 아이템의 부모 역할을 하는 PARENT_ITEM_ID를 모은고 NULL 값을 걸러준다.
4. 내림차순 정렬
답변
SELECT II.ITEM_ID, II.ITEM_NAME, II.RARITY
FROM ITEM_INFO II
WHERE II.ITEM_ID NOT IN (
SELECT PARENT_ITEM_ID
FROM ITEM_TREE
WHERE PARENT_ITEM_ID IS NOT NULL
)
ORDER BY II.ITEM_ID DESC;
NOT IN 사용할 떄 NULL 처리를 어떻게 하는지 배울 수 있는 문제였다.
서브 쿼리 결과에 NULL 이 단 하나라도 포함되어 있으면 NOT IN 쿼리가 정상 작동 하지않고 아무 데이터도 반환하지 않는다는 것을 배웠다.
'프로그래머스 SQL' 카테고리의 다른 글
| 12.프로그래머스 SQL Lv.3 (즐겨찾기가 가장 많은 식당 정보 출력하기) (0) | 2026.05.19 |
|---|---|
| 11.프로그래머스 SQL Lv.3 (있었는데요 없었습니다) (0) | 2026.05.19 |
| 9.프로그래머스 SQL lv.3 (조건별로 분류하여 주문상태 출력하기) (0) | 2026.05.19 |
| 8. 프로그래머스 SQL lv.3(조회수가 가장 많은 중고거래 게시판의 첨부파일 조회하기) (0) | 2026.05.19 |
| 7.프로그래머스 SQL lv3 (물고기 종류 별 대어 찾기) (0) | 2026.05.11 |