코딩테스트/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_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