문제 설명
https://school.programmers.co.kr/learn/courses/30/lessons/273712
주어진 문제의 조건을 정리하면 다음과 같다.
- 더 이상 업그레이드할 수 없는 아이템 조회
- 아이템 ID(ITEM_ID), 아이템 명(ITEM_NAME), 아이템의 희귀도(RARITY)를 출력
- 아이템 ID를 기준으로 내림차순
처음에는 문제 자체가 좀 어려웠지만, 천천히 해석을 해보자.
ITEM_TREE 테이블은 각 아이템 간의 업그레이드 정보를 담고 있다.
즉, 주어진 테이블을 차례대로 정리하면..
PARENT_ITEM_ID에서 업그레이드 한 것이 ITEM_ID이 되는 것이다.
ITEM_ID <- PARENT_ITEM_ID
ITEM_A <- X(부모 아이템 없음)
ITEM_B <- ITEM_A (A에서 B로 업그레이드 가능)
ITEM_C <- ITEM_A (A에서 C로 업그레이드 가능)
ITEM_D <- ITEM_B (B에서 D로 업그레이드 가능)
ITEM_E <- ITEM_B (B에서 E로 업그레이드 가능)
즉, ITEM_A와 ITEM_B는 무언가로 업그레이드가 가능하며, 다른 아이템들은 업그레이드가 불가하다.
정리하자면, 'PARENT_ITEM_ID'에 없는 ITEM_ID를 구하면 되는 것이다!
내 풀이
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 i.ITEM_ID NOT IN (
SELECT PARENT_ITEM_ID
FROM ITEM_TREE
WHERE PARENT_ITEM_ID IS NOT NULL
)
ORDER BY i.ITEM_ID DESC;
주의할 점
: IN 연산자 사용시 비교 구문에 NULL이 들어가면 안되므로, PARENT_ITEM_ID가 NULL이 아닌 것으로 한정해줘야 한다.
이를 기반으로, PARENT_ITEM_ID에 존재하지 않는 ITEM_ID를 뽑아내면 된다.
끄읏-!
'코딩테스트 > SQL' 카테고리의 다른 글
[프로그래머스][MySQL] Lv. 4 주문량이 많은 아이스크림들 조회하기 (0) | 2024.07.16 |
---|---|
[프로그래머스][MySQL] Lv. 4 5월 식품들의 총매출 조회하기 (0) | 2024.07.16 |
[프로그래머스][MySQL] Lv. 2 연도별 대장균 크기의 편차 구하기 (0) | 2024.07.15 |
[프로그래머스][MySQL] Lv. 3 물고기 종류 별 대어 찾기 (0) | 2024.07.15 |
[프로그래머스][MySQL] Lv. 2 중복 제거하기 (0) | 2024.07.15 |