
카테고리: SQL · 서브쿼리 · MAX
플랫폼: 프로그래머스
난이도: Level 2
문제 설명
다음은 식품의 정보를 담은 FOOD_PRODUCT 테이블입니다.
Column name Type Nullable
| PRODUCT_ID | VARCHAR(10) | FALSE |
| PRODUCT_NAME | VARCHAR(50) | FALSE |
| PRODUCT_CD | VARCHAR(10) | TRUE |
| CATEGORY | VARCHAR(10) | TRUE |
| PRICE | NUMBER | TRUE |
FOOD_PRODUCT 테이블에서 가격이 제일 비싼 식품의 식품 ID, 식품 이름, 식품 코드, 식품분류, 식품 가격을 조회하는 SQL문을 작성해주세요.
예시
입력
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 |
출력
PRODUCT_ID PRODUCT_NAME PRODUCT_CD CATEGORY PRICE
| P0020 | 맛있는산초유 | CD_OL00010 | 식용유 | 6500 |
내 풀이
SELECT PRODUCT_ID, PRODUCT_NAME, PRODUCT_CD, CATEGORY, PRICE
FROM FOOD_PRODUCT
WHERE PRICE = (SELECT MAX(PRICE) FROM FOOD_PRODUCT);
공부 포인트
1. 서브쿼리 (Subquery)
- WHERE PRICE = (SELECT MAX(PRICE) FROM FOOD_PRODUCT) 처럼 쿼리 안에 또 다른 쿼리를 넣는 것을 서브쿼리라고 함
- 서브쿼리가 먼저 실행되어 최댓값을 구한 뒤, 바깥 쿼리에서 해당 값과 일치하는 행을 조회하는 방식
2. ORDER BY + LIMIT vs 서브쿼리
- ORDER BY PRICE DESC LIMIT 1 로도 동일한 결과를 얻을 수 있지만, 동일한 최고가 상품이 여러 개일 경우 서브쿼리 방식이 모두 조회할 수 있어 더 안전함
추가 팁
- 동일한 최고가 상품이 여러 개인 경우 ORDER BY PRICE DESC LIMIT 1 은 한 건만 반환하지만, 서브쿼리 방식은 해당하는 모든 행을 반환합니다.
- 서브쿼리는 WHERE, FROM, SELECT 절 어디에서나 사용할 수 있으므로 다양하게 활용해보세요.
마무리 요약
이번 문제는 MAX() 와 서브쿼리를 조합하여 특정 조건의 행 전체를 조회하는 실무형 SQL 예제다.
서브쿼리를 활용한 조건 필터링은 집계 결과를 WHERE 절에 활용할 때 자주 쓰이는 핵심 패턴이므로 꼭 익혀두는 것이 좋다.
이상입니다. 혹시나 제가 잘못된 내용을 작성했거나 더 좋은 방법이 있다면 댓글 남겨주세요.
지금까지 이 글을 봐주셔서 감사합니다.
'코딩테스트 > SQL' 카테고리의 다른 글
| [프로그래머스_SQL] Lv.2 진료과별 총 예약 횟수 출력하기 (0) | 2026.03.31 |
|---|---|
| [프로그래머스_SQL] Lv.1 조건에 맞는 아이템들의 가격의 총합 구하기 (0) | 2026.03.17 |
| [프로그래머스_SQL] Lv.1 잡은 물고기 중 가장 큰 물고기의 길이 구하기 (0) | 2026.03.16 |
| [프로그래머스_SQL] Lv.2 동명 동물 수 찾기 (0) | 2026.03.15 |