몸과 마음이 건전한 SW 개발자

[SQL-SELECT] 프로그래머스 Lv. 2 업그레이드 된 아이템 구하기 [다시 풀어 보기] 본문

SQL/다시 풀어 보기

[SQL-SELECT] 프로그래머스 Lv. 2 업그레이드 된 아이템 구하기 [다시 풀어 보기]

스위태니 2024. 12. 18. 16:29

문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/273711

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

정답 코드

SELECT 
    IT.ITEM_ID, 
    IT.ITEM_NAME, 
    IT.RARITY
FROM ITEM_INFO IT
JOIN ITEM_TREE TR
ON IT.ITEM_ID = TR.ITEM_ID
WHERE TR.PARENT_ITEM_ID IN (
    SELECT ITEM_ID
    FROM ITEM_INFO
    WHERE RARITY = 'RARE'
)
ORDER BY IT.ITEM_ID DESC;

풀이 과정

  1. SELECT IT.ITEM_ID, IT.ITEM_NAME, IT.RARITY
    • ITEM_INFO 테이블에서 아이템의 ID, 이름, 희귀도(RARITY)를 가져온다.
  2. JOIN ITEM_TREE
    • ITEM_INFO와 ITEM_TREE 테이블을 조인하여 ITEM_ID와 관계된 정보를 연결한다.
  3. WHERE TR.PARENT_ITEM_ID IN (...)
    • PARENT_ITEM_ID가 희귀도가 'RARE'인 아이템들의 ITEM_ID에 해당하는 데이터를 필터링한다.
    • 이를 통해 'RARE' 희귀도를 가진 아이템의 다음 업그레이드 아이템을 찾는다.
  4. IN (SELECT ITEM_ID FROM ITEM_INFO WHERE RARITY = 'RARE')
    • ITEM_INFO 테이블에서 희귀도가 'RARE'인 아이템들의 ITEM_ID를 서브쿼리로 가져온다.
  5. ORDER BY IT.ITEM_ID DESC
    • 결과를 ITEM_ID 기준으로 내림차순 정렬다.

요약

 

  1. ITEM_INFO에서 희귀도가 'RARE'인 아이템의 ITEM_ID를 서브쿼리로 가져온다.
  2. ITEM_TREE에서 해당 ITEM_ID를 부모로 가지는 자식 아이템들을 찾는다.
  3. 찾은 아이템들의 상세 정보를 ITEM_INFO에서 가져온다.
  4. 결과를 ITEM_ID 기준으로 내림차순 정렬하여 출력한다.

 

느낀점

  • 조인이 어색하다 계속 풀어 보자.