본문 바로가기
🗄️ DB_이야기/# ⚡SQL

🚀[SQL 알고리즘 문제 풀이] Programmers : 가격이 제일 비싼 식품의 정보 출력하기(MAX)

by gwon_s 2026. 4. 19.

👇 가격이 제일 비싼 식품의 정보 출력하기

 

 

프로그래머스

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)이 가능합니다.