- [프로그래머스][SQL 고득점 KIT][SELECT][Level 2] 업그레이드 된 아이템 구하기2024년 10월 18일
- 쪼시
- 작성자
- 2024.10.18.:57
반응형https://school.programmers.co.kr/learn/courses/30/lessons/273711
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
[프로그래머스][SQL 고득점 KIT][SELECT][Level 2] 업그레이드 된 아이템 구하기
문제 설명
어느 한 게임에서 사용되는 아이템들은 업그레이드가 가능합니다. 'ITEM_A'->'ITEM_B'와 같이 업그레이드가 가능할 때 'ITEM_A'를 'ITEM_B' 의 PARENT 아이템, PARENT 아이템이 없는 아이템을 ROOT 아이템이라고 합니다. 예를 들어 'ITEM_A'->'ITEM_B'->'ITEM_C'와 같이 업그레이드가 가능한 아이템이 있다면 'ITEM_C'의 PARENT 아이템은 'ITEM_B' 'ITEM_B'의 PARENT 아이템은 'ITEM_A' ROOT 아이템은 'ITEM_A'가 됩니다.
다음은 해당 게임에서 사용되는 아이템 정보를 담은 ITEM_INFO 테이블과 아이템 관계를 나타낸 ITEM_TREE 테이블입니다. ITEM_INFO 테이블은 다음과 같으며, ITEM_ID, ITEM_NAME, RARITY, PRICE는 각각 아이템 ID, 아이템 명, 아이템의 희귀도, 아이템의 가격을 나타냅니다.
Column name Type Nullable ITEM_ID INTEGER FALSE ITEM_NAME VARCHAR(N) FALSE RARITY INTEGER FALSE PRICE INTEGER FALSE ITEM_TREE 테이블은 다음과 같으며, ITEM_ID, PARENT_ITEM_ID는 각각 아이템 ID, PARENT 아이템의 ID를 나타냅니다.
Column name Type Nullable ITEM_ID INTEGER FALSE PARENT_ITEM_ID INTEGER TRUE 단, 각 아이템들은 오직 하나의 PARENT 아이템 ID를 가지며, ROOT 아이템의 PARENT 아이템 ID는 NULL 입니다. ROOT 아이템이 없는 경우는 존재하지 않습니다.
문제
아이템의 희귀도가 'RARE'인 아이템들의 모든 다음 업그레이드 아이템의 아이템 ID(ITEM_ID), 아이템 명(ITEM_NAME), 아이템의 희귀도(RARITY)를 출력하는 SQL 문을 작성해 주세요. 이때 결과는 아이템 ID를 기준으로 내림차순 정렬주세요.
예시
생략
아이템의 희귀도가 'RARE'인 아이템은 'ITEM_A', 'ITEM_B', 'ITEM_D', 'ITEM_E' 입니다. 이 중 'ITEM_A' 는 'ITEM_B', 'ITEM_C' 로 업그레이드가 가능하며 'ITEM_B' 는 'ITEM_D' , 'ITEM_E' 로 업그레이드가 가능합니다. 'ITEM_D' 와 'ITEM_E'는 더 이상 업그레이드가 가능하지 않습니다. 따라서 결과는 다음과 같이 나와야 합니다.
ITEM_ID ITEM_NAME RARITY 4 ITEM_E RARE 3 ITEM_D RARE 2 ITEM_C LEGEND 1 ITEM_B RARE
문제 풀이
- 아이템의 희귀도가 'RARE'인 아이템들의 모든 다음 업그레이드 아이템의
- ITEM_E아이템 ID(ITEM_ID), 아이템 명(ITEM_NAME), 아이템의 희귀도(RARITY)를 출력하는 SQL 문을 작성
- 아이템 ID를 기준으로 내림차순 정렬
SELECT A.ITEM_ID, A.ITEM_NAME, A.RARITY FROM ITEM_INFO A JOIN ITEM_TREE B ON A.ITEM_ID = B.ITEM_ID WHERE B.PARENT_ITEM_ID IN (SELECT ITEM_ID FROM ITEM_INFO WHERE RARITY = 'RARE') ORDER BY A.ITEM_ID DESC
- ITEM_INFO테이블의 ITEM_ID, ITEM_NAME, RARITY 를 조회한다.
- 아이템의 희귀도가 'RARE'인 아이템들의 모든 다음 업그레이드 아이템을 찾기 위해서 ITEM_INFO테이블과 ITEM_TREE을 ITEM_ID으로 조인
- 조인된 결과에서 부모 아이템 ID가 서브쿼리의 결과가 'RARE'인 경우만 조회한다.
- ITEM_ID 기준으로 내림차순 DESC 정렬
실행 결과
ITEM_ID ITEM_NAME RARITY 4 ITEM_E RARE 3 ITEM_D RARE 2 ITEM_C LEGEND 1 ITEM_B RARE 반응형'코딩 테스트 > SQL' 카테고리의 다른 글
[프로그래머스][SQL 고득점 KIT][SELECT][Level 2] 조건에 맞는 개발자 찾기 (2) 2024.10.18 [프로그래머스][SQL 고득점 KIT][SELECT][Level 1] Python 개발자 찾기 (1) 2024.10.18 [프로그래머스][SQL 고득점 KIT][SELECT][Level 1] 조건에 맞는 회원수 구하기 (2) 2024.10.17 [프로그래머스][SQL 고득점 KIT][SELECT][Level 1] 상위 n개 레코드 (2) 2024.10.17 [프로그래머스][SQL 고득점 KIT][SELECT][Level 1] 여러 기준으로 정렬하기 (1) 2024.10.17 다음글이전글이전 글이 없습니다.댓글