Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- ifnull
- 해외결제
- having
- IS NOT NULL
- inner join
- SubQuery
- 투자자산운용사
- count
- MySQL
- GROUP BY
- LIMIT
- MAX
- SQL
- Python
- order by
- IELTS
- 도서추천
- join
- 날짜 포맷
- 서브쿼리
- alias
- Round
- IN
- programmers
- 트래블테크
- is null
- where
- 금융IT
- 금융 플랫폼
- date_format
Archives
- Today
- Total
Every Step Matters
[프로그래머스 SQL Lv.2] ROOT 아이템 구하기 (MySQL) 본문
문제링크 : https://school.programmers.co.kr/learn/courses/30/lessons/273710
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
1. 테이블
(1) ITEM_INFO
| Column name | Type | Nullable | Description |
| ITEM_ID | INTEGER | FALSE | 아이템 ID |
| ITEM_NAME | VARCHAR(N) | FALSE | 아이템 명 |
| RARITY | INTEGER | FALSE | 아이템의 희귀도 |
| PRICE | INTEGER | FALSE | 아이템의 가격 |
(2) ITEM_TREE
| Column name | Type | Nullable | Description |
| ITEM_ID | INTEGER | FALSE | 아이템 ID |
| PARENT_ITEM_ID | INTEGER | TRUE | PARENT 아이템의 ID |
'ITEM_A'->'ITEM_B'와 같이 업그레이드가 가능할 때 'ITEM_A'를 'ITEM_B'의 PARENT 아이템이라고 하며,
PARENT 아이템이 없는 아이템을 ROOT 아이템이라고 한다.
2. 문제
(1) ROOT 아이템을 찾아 (2) 아이템 ID(ITEM_ID), 아이템 명(ITEM_NAME)을 출력하는 SQL문을 작성해 주세요. 이때, (3) 결과는 아이템 ID를 기준으로 오름차순 정렬해 주세요.
3. 문제풀이
(1) ROOT 아이템을 찾기 위해서는 item_tree 테이블에서 RARENT_ITEM_ID가 NULL인 아이템을 찾고, 해당 아이템에 대해 item_info에 있는 item_id, item_name을 출력해야 한다. 따라서 두 테이블을 먼저 조인해야 한다.
SELECT T1.item_id, item_name -- (2) 아이템id, 아이템 이름 조회
FROM item_info T1
JOIN item_tree T2
ON T1.item_id = T2.item_id
SELECT문에서 item_name은 item_tree 테이블에만 있는 컬럼명이므로 시스템이 알아서 해당 테이블의 컬럼으로 인식한다. item_id는 두 테이블 모두에 있는 컬럼명이므로 어떤 테이블의 컬럼인지 명시해 줘야 한다.
이후 조인한 테이블에서 RARENT_ITEM_ID가 NULL인 아이템을 찾는다.
SELECT T1.item_id, item_name
FROM item_info T1
JOIN item_tree T2
ON T1.item_id = T2.item_id
WHERE T2.parent_item_id IS NULL -- (1) ROOT 아이템 찾기 (WHERE 대신 AND 사용해도 결과 동일)
WHERE 대신 AND를 사용해서 조인조건으로 먼저 걸러줄 수도 있다. 하지만 가시성을 위해 WHERE을 더 추천한다.
(3) 결과를 아이템 ID 기준으로 오름차순 정렬한다.
SELECT T1.item_id, item_name
FROM item_info T1
JOIN item_tree T2
ON T1.item_id = T2.item_id
WHERE T2.parent_item_id IS NULL
ORDER BY T1.item_id -- (4) item_id 기준 오름차순 정렬
4. 정답
따라서 정답은
SELECT T1.item_id, item_name
FROM item_info T1
JOIN item_tree T2
ON T1.item_id = T2.item_id
WHERE T2.parent_item_id IS NULL
ORDER BY T1.item_id'Database > SQL' 카테고리의 다른 글
| [SQL] 서브 쿼리 (SubQuery) : (2) 중첩 서브 쿼리 (WHERE절에 작성) (0) | 2026.01.06 |
|---|---|
| [프로그래머스 SQL Lv.3] 업그레이드 할 수 없는 아이템 구하기 (MySQL) (0) | 2026.01.05 |
| [프로그래머스 SQL Lv.3] 물고기 종류 별 대어 찾기 (MySQL) (0) | 2026.01.05 |
| [프로그래머스 SQL Lv.2] 진료과별 총 예약 횟수 출력하기 (MySQL) (0) | 2026.01.05 |
| [프로그래머스 SQL Lv.2] 조건에 맞는 도서와 저자 리스트 출력하기 (MySQL) (0) | 2026.01.04 |