꿈은 데이터분석가, 취미는 계획

[MY SQL] 부모,자식관계를 업그레이드 아이템으로 이해하기 본문

SQL/sql문풀

[MY SQL] 부모,자식관계를 업그레이드 아이템으로 이해하기

data_2080 2024. 4. 14. 19:21
728x90

출처: [프로그래머스 스쿨 - 코딩테스트 연습 - MY SQL 문제] :  업그레이드 된 아이템 구하기

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


문제(일부):  아이템의 희귀도가 'RARE'인 아이템들의 모든 다음 업그레이드 아이템의
아이템 ID(ITEM_ID), 아이템 명(ITEM_NAME), 아이템의 희귀도(RARITY)를 출력

 

0. 문제풀이 포인트

1) 업그레이드 전의 희귀도가 'RARE'인지 확인

2) A테이블의 부모ID와 B테이블의 자식의 부모ID가 일치 

3) ITEM_ID가 일치하는 것을 기준으로 ITEM_INFO가져오기

 

1. JOIN 여러번 하기

1) 업그레이드 전 ITEM_IFNO의 테이블을 II1, 업그레이드 후 테이블을 II2로 사용

2) II1과 ITEM_TREE인 IT를 조인할 때 조건으로 부모, 자식 일치 확인

3) II2와 IT를 조인할 때 ITEM_ID를 조건으로하여 ITEM정보 가져오기

4) WHERE절에서 업그레이드 전 테이블을 기준으로 희귀도 RARE만 필터링

SELECT II_2.ITEM_ID, II_2.ITEM_NAME, II_2.RARITY
FROM ITEM_INFO II_1
JOIN ITEM_TREE IT ON II_1.ITEM_ID = IT.PARENT_ITEM_ID
JOIN ITEM_INFO II_2 ON II_2.ITEM_ID = IT.ITEM_ID
WHERE II_1.RARITY = 'RARE'
ORDER BY II_2.ITEM_ID DESC

 

2. JOIN과 서브쿼리 활용하기

1) 1번과 동일하게 ITEM_ID가 같은 것에 대한 정보를 가져옴
2) 서브쿼리로 부모와 자식의 일치 및 희귀도 RARE를 필터링

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