728x90
문제
https://school.programmers.co.kr/learn/courses/30/lessons/273711
- 아이템의 희귀도가 'RARE'인 아이템
- 다음 업그레이드 아이템의 ITEM_ID, ITEM_NAME, RARITY를 출력하는 SQL문 작성
- ITEM_A → ITEM_B → ITEM_C 와 같이 업그레이드 가능한 아이템이 있을 때
- 'ITEM_C'의 PARENT 아이템은 'ITEM_B'
- 'ITEM_B'의 PARENT 아이템은 'ITEM_A'
- 'ITEM_A'는 ROOT 아이템
- ITEM_A → ITEM_B → ITEM_C 와 같이 업그레이드 가능한 아이템이 있을 때
- ITEM_ID 기준 내림차순 정렬
테이블
ITEM_INFO | ITEM_TREE |
풀이과정
(1) ITEM_INFO 테이블과 ITEM_TREE 테이블 LEFT 조인
1 2 3 4 | SELECT * FROM ITEM_TREE IT LEFT JOIN ITEM_INFO II ON IT.ITEM_ID = II.ITEM_ID | cs |
(2) 다음 업그레이드 아이템을 조회해야 하므로
이전 아이템이 없는 ROOT인 경우 제거하기(NULL이 아니어야 함)
1 2 3 4 | SELECT II.ITEM_ID, II.ITEM_NAME, II.RARITY FROM ITEM_INFO II, ITEM_TREE IT WHERE (II.ITEM_ID = IT.ITEM_ID) AND IT.PARENT_ITEM_ID IS NOT NULL ORDER BY II.ITEM_ID DESC | cs |
(3) 문제에서 요구한 'RARE' 아이템에 대한 다음 업그레이드 아이템 조회하기
1 2 3 4 5 6 7 | SELECT IT.ITEM_ID, II.ITEM_NAME, II.RARITY FROM ITEM_TREE IT LEFT JOIN ITEM_INFO II ON IT.ITEM_ID = II.ITEM_ID WHERE IT.PARENT_ITEM_ID IN (SELECT ITEM_ID FROM ITEM_INFO WHERE RARITY = 'RARE') ORDER BY IT.ITEM_ID DESC | cs |
728x90
'코딩테스트 > SQL 코드카타' 카테고리의 다른 글
MySQL 프로그래머스 | 자동차 평균 대여 기간 구하기 (DATEDIFF 함수 주의할 점, +1을 해줘야 하는 이유) (1) | 2024.09.13 |
---|---|
MySQL 프로그래머스 | 조건에 맞는 개발자 (비트 연산자 활용) (1) | 2024.09.12 |
MySQL 프로그래머스 | 오프라인/온라인 판매 데이터 통합하기 (SELECT문 컬럼 NULL 처리) (1) | 2024.09.10 |
MySQL 프로그래머스 | 재구매가 일어난 상품과 회원리스트 구하기 (2) | 2024.09.09 |
MySQL 프로그래머스 | 없어진 기록 찾기 (IN 또는 NOT IN 함수 안에는 IS NOT NULL) (0) | 2024.09.06 |
댓글