https://school.programmers.co.kr/learn/courses/30/lessons/273711
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
[문제 설명]
아이템의 희귀도가 'RARE'인 아이템들의 모든 다음 업그레이드 아이템의 아이템 ID(ITEM_ID), 아이템 명(ITEM_NAME), 아이템의 희귀도(RARITY)를 출력하는 SQL 문을 작성해 주세요. 이때 결과는 아이템 ID를 기준으로 내림차순 정렬주세요.
[나의 풀이]
SELECT I.ITEM_ID, ITEM_NAME, RARITY
FROM ITEM_INFO I JOIN ITEM_TREE T
ON I.ITEM_ID = T.ITEM_ID
WHERE PARENT_ITEM_ID IN (SELECT ITEM_ID
FROM ITEM_INFO
WHERE RARITY = 'RARE')
ORDER BY I.ITEM_ID DESC;
문제를 쉽게 풀어서 얘기하면 PARENT ITEM이 RARE인 ITEM의 ID,NAME,RARITY를 출력하라는 것임
JOIN을 한 번 하고 WHERE절에 SELECT구문을 넣어서 작성한 경우
[다른 풀이]
SELECT ITEM_ID, ITEM_NAME, RARITY FROM ITEM_INFO
WHERE ITEM_ID IN (SELECT ITEM_ID FROM ITEM_TREE WHERE PARENT_ITEM_ID
IN (SELECT ITEM_ID FROM ITEM_INFO WHERE RARITY = 'RARE'))
ORDER BY ITEM_ID DESC;
JOIN을 사용하지 않고 서브쿼리만을 활용하여 작성한 경우
RARITY가 RARE인 ITEM_ID를 ITEM_INFO테이블에서 추출
-> ITEM_TREE테이블의 PARENT_ITEM_ID중 앞에서 추출한 ID에 해당하는 것만 SELECT
-> 최종적으로 ITEM_INFO테이블에서 위의 조건들에 해당하는 ID를 골라서 ID,NAME,RARITY를 출력
'프로그래머스 > My SQL' 카테고리의 다른 글
💫조건에 맞는 사원 정보 조회하기 (0) | 2024.11.11 |
---|---|
💫조건에 맞는 개발자 찾기 (0) | 2024.11.11 |
조건에 부합하는 중고거래 상태 조회하기 (0) | 2024.11.09 |
자동차 평균 대여 기간 구하기 (0) | 2024.11.08 |
자동차 종류 별 특정 옵션이 포함된 자동차 수 구하기 (0) | 2024.11.07 |