코딩테스트/SQL 코드카타
MySQL 프로그래머스 | 업그레이드 된 아이템 구하기 (부모 노드, 자식 노드)
ANNASENA
2024. 9. 11. 08:00
728x90
문제
https://school.programmers.co.kr/learn/courses/30/lessons/273711
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
- 아이템의 희귀도가 'RARE'인 아이템
- 다음 업그레이드 아이템의 ITEM_ID, ITEM_NAME, RARITY를 출력하는 SQL문 작성
- ITEM_A → ITEM_B → ITEM_C 와 같이 업그레이드 가능한 아이템이 있을 때
- 'ITEM_C'의 PARENT 아이템은 'ITEM_B'
- 'ITEM_B'의 PARENT 아이템은 'ITEM_A'
- 'ITEM_A'는 ROOT 아이템
- ITEM_A → ITEM_B → ITEM_C 와 같이 업그레이드 가능한 아이템이 있을 때
- ITEM_ID 기준 내림차순 정렬
테이블
ITEM_INFO | ITEM_TREE |
![]() |
![]() |
풀이과정
(1) ITEM_INFO 테이블과 ITEM_TREE 테이블 LEFT 조인
1 2 3 4 | SELECT * FROM ITEM_TREE IT LEFT JOIN ITEM_INFO II ON IT.ITEM_ID = II.ITEM_ID | cs |
(2) 다음 업그레이드 아이템을 조회해야 하므로
이전 아이템이 없는 ROOT인 경우 제거하기(NULL이 아니어야 함)
1 2 3 4 | SELECT II.ITEM_ID, II.ITEM_NAME, II.RARITY FROM ITEM_INFO II, ITEM_TREE IT WHERE (II.ITEM_ID = IT.ITEM_ID) AND IT.PARENT_ITEM_ID IS NOT NULL ORDER BY II.ITEM_ID DESC | cs |
(3) 문제에서 요구한 'RARE' 아이템에 대한 다음 업그레이드 아이템 조회하기
1 2 3 4 5 6 7 | SELECT IT.ITEM_ID, II.ITEM_NAME, II.RARITY FROM ITEM_TREE IT LEFT JOIN ITEM_INFO II ON IT.ITEM_ID = II.ITEM_ID WHERE IT.PARENT_ITEM_ID IN (SELECT ITEM_ID FROM ITEM_INFO WHERE RARITY = 'RARE') ORDER BY IT.ITEM_ID DESC | cs |
728x90