프로그래머스 SQL 고득점 킷 업그레이드 된 아이템 구하기

hysss·2024년 3월 9일
0

SELECT - 업그레이드 된 아이템 구하기

문제 분석

아이템의 희귀도가 'RARE'인 아이템들의
모든 다음 업그레이드 아이템
아이템 ID(ITEM_ID), 아이템 명(ITEM_NAME), 아이템의 희귀도(RARITY)를 출력하는 SQL 문을 작성해 주세요.
이때 결과는 아이템 ID를 기준으로 내림차순 정렬주세요.

코드

SELECT CHILD.ITEM_ID, CHILD.ITEM_NAME, CHILD.RARITY
FROM ITEM_INFO AS I JOIN ITEM_TREE AS T ON I.ITEM_ID=T.PARENT_ITEM_ID
     JOIN ITEM_INFO AS CHILD ON T.ITEM_ID=CHILD.ITEM_ID
WHERE I.RARITY="RARE"
ORDER BY CHILD.ITEM_ID DESC

문제 풀이

아이템 A를 업그레이드하면 아이템 B가 된다면, A는 B의 부모 아이템(Parent)이다.

각 아이템의 부모 아이템에 대한 정보를 가지고 있는 ITEM_TREE 테이블을 기존의 ITEM_INFO 테이블에 JOIN시키면 각 아이템의 자식 아이템, 즉 업그레이드 된 아이템이 무엇인지 알 수 있게 된다.

FROM ITEM_INFO AS I JOIN ITEM_TREE AS T ON I.ITEM_ID=T.PARENT_ITEM_ID

조인된 테이블의 예시는 다음과 같다.

  • ITEM_INFO 테이블 예시
ITEM_IDITEM_NAMERARITYPRICE
1ITEM_ACOMMON100
2ITEM_BRARE200
3ITEM_CEPIC300
  • ITEM_TREE 테이블 예시
ITEM_IDPARENT_ITEM_ID
21
32
  • JOIN된 테이블 모습
I.ITEM_IDI.ITEM_NAMEI.RARITYI.PRICET.ITEM_IDT.PARENT_ITEM_ID
1ITEM_ACOMMON10021
2ITEM_BRARE20032


업그레이드 된 아이템의 아이디가 무엇인지 알게 되었으니(T.ITEM_ID), 이 아이템의 RARITY를 알기 위해서는 다시 한번 ITEM_INFO 테이블과 JOIN해야 한다. 즉, 이번 조인 조건은 T.ITEM_ID = CHILD.ITEM_ID가 될 것이다.

FROM (ITEM_INFO AS I JOIN ITEM_TREE AS T ON I.ITEM_ID=T.PARENT_ITEM_ID)
     JOIN ITEM_INFO AS CHILD ON T.ITEM_ID=CHILD.ITEM_ID
  • JOIN 된 테이블 모습
I.ITEM_IDI.ITEM_NAMEI.RARITYI.PRICET.ITEM_IDT.PARENT_ITEM_IDCHILD.ITEM_IDCHILD.ITEM_NAMECHILD.RARITYCHILD.PRICE
1ITEM_ACOMMON100212ITEM_BRARE200
2ITEM_BRARE200323ITEM_CEPIC300


각 아이템 정보에 업그레이드 된 아이템의 정보까지 추가되었으니, WHERE절을 이용하여 RARITYRARE인 아이템에 대한 정보만 추출하고, SELECT절에서 업그레이드 된 아이템의 정보인 CHILD_ITEM_ID, CHILD_ITEM_NAME, CHILD_RARITY만 추출하면 문제의 조건을 만족시킬 수 있다.

  • 완성된 테이블 모습
CHILD.ITEM_IDCHILD.ITEM_NAMECHILD.RARITY
3ITEM_CEPIC
profile
매일 매일 규칙적으로

0개의 댓글