👇 가격이 제일 비싼 식품의 정보 출력하기
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
🔓 문제 설명
FOOD_PRODUCT 테이블에서 가격이 제일 비싼 식품의 식품 ID, 식품 이름, 식품 코드, 식품분류, 식품 가격을 조회하는 SQL문을 작성해주세요.
예시 문제 데이터(FOOD_PRODUCT)
| PRODUCT_ID | PRODUCT_NAME | PRODUCT_CD | CATEGORY | PRICE |
| P0018 | 맛있는고추기름 | CD_OL00008 | 식용유 | 6100 |
| P0019 | 맛있는카놀라유 | CD_OL00009 | 식용유 | 5100 |
| P0020 | 맛있는산초유 | CD_OL00010 | 식용유 | 6500 |
| P0021 | 맛있는케첩 | CD_OL00001 | 소스 | 4500 |
| P0022 | 맛있는마요네즈 | CD_OL00002 | 소스 | 4700 |
⚡SQL Query
기본 정답
SELECT PRODUCT_ID, PRODUCT_NAME, PRODUCT_CD, CATEGORY, PRICE
FROM FOOD_PRODUCT
ORDER BY PRICE DESC
LIMIT 1;
또는 서브쿼리 방식
SELECT PRODUCT_ID, PRODUCT_NAME, PRODUCT_CD, CATEGORY, PRICE
FROM FOOD_PRODUCT
WHERE PRICE = (SELECT MAX(PRICE) FROM FOOD_PRODUCT);
Oracle 계층형 쿼리 사용
SELECT *
FROM FOOD_PRODUCT
ORDER BY PRICE DESC
FETCH FIRST 1 ROW ONLY;
또는 12c 미만 버전
SELECT *
FROM (
SELECT * FROM FOOD_PRODUCT ORDER BY PRICE DESC
)
WHERE ROWNUM = 1;
🔎 풀이 설명
1. 3단 조인 구조
- S1: 1세대 (부모가 NULL인 ID)
- S2: 2세대 (S1 을 부모로 둔 ID)
- S3: 3세대 (S2 를 부모도 둔 ID)
2. 조건 매칭:
- WHERE S1.PARENT_ID IS NULL을 통해 최상위 부모임을 보장합니다.
💡인사이트
1. 같은 숫자 또는 같은 점수 처리
- MAX 값이 2개라면 LIMIT를 사용했을때는 1개, WHERE PRICE = (SELECT MAX...)는 2개 모두 보여줍니다.
2. 인덱스 설계
- 조건 대상인 PRICE 컬럼에 인덱스를 생성하여, 인덱스의 가장 끝(MAX) 노드로 바로 찾아가서 데이터를 가져오는 INDEX FULL SCAN(MAX/MIN)이 가능합니다.
'🗄️ DB_이야기 > # ⚡SQL' 카테고리의 다른 글
| 🚀[SQL 알고리즘 문제 풀이] Programmers : 연도별 대장균 크기의 편차 구하기(MAX) (0) | 2026.04.19 |
|---|---|
| 🚀[SQL 알고리즘 문제 풀이] Programmers : 물고기 종류 별 대어 찾기(MAX) (1) | 2026.04.19 |
| 🚀[SQL 알고리즘 문제 풀이] Programmers : 멸종위기의 대장균 찾기(SELECT) (0) | 2026.04.18 |
| 🚀[SQL 알고리즘 문제 풀이] Programmers : 특정 세대의 대장균 찾기(SELECT) (0) | 2026.04.18 |
| 🚀[SQL 알고리즘 문제 풀이] Programmers : 대장균의 크기에 따라 분류하기 2(SELECT) (0) | 2026.04.17 |