PS/SQL

[프로그래머스] 식품분류별 가장 비싼 식품의 정보 조회하기 (SQL)

nyrimmm 2025. 8. 10. 17:26

[문제 링크]

https://school.programmers.co.kr/learn/courses/30/lessons/131116

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

문제 설명

  • Lv4의 문제
  • 식품 정보를 담은 FOOD_PRODUCT 테이블에서 식품분류(CATEGROY)별로 가격이 제일 비싼 식품의 분류, 가격, 이름을 조회
  • 식품분류가 '과자', '국', '김치', '식용유' 인 경우만 출력
  • 식품 가격을 기준으로 내림차순 정렬

 

 

 

문제 풀이

◼️ category 별로 그룹화해서 가격이 제일 비싼 식품의 카테고리, 가격 조회 → MAX_PRODUCT

    - IN 연산자로 CATEGORY가 '과자', '국', '김치', '식용유' 인 식품만 조회

 

◼️ FOOD_PRODUCT와 MAX_PRODUCT 테이블 join

    - MAX_PRODUCT의 MAX_PRICE와 FOOD_PRODUCT의 PRICE가 같은 식품의 정보를 조회

 

전체코드

WITH MAX_PRODUCT AS (
    SELECT CATEGORY, MAX(PRICE) AS MAX_PRICE
    FROM FOOD_PRODUCT
    WHERE CATEGORY IN ('과자', '국', '김치', '식용유')
    GROUP BY CATEGORY
)

SELECT F.CATEGORY, PRICE AS MAX_PRICE, PRODUCT_NAME
FROM FOOD_PRODUCT F JOIN MAX_PRODUCT M
ON F.CATEGORY = M.CATEGORY
WHERE F.PRICE = M.MAX_PRICE
ORDER BY 2 DESC;

 

 

 

✔️ 실패한 풀이

아래와 같이 CATEGORY로 그룹화한 후 MAX 함수로 가격이 가장 비싼 것을 조회하면,

해당 카테고리의 최고 가격은 구할 수 있지만, 상품명은 은 그 최고 가격과 일치하는 상품명이 아니라 그룹 내 임의의 상품명이 나올 수 있다. 

SELECT CATEGORY, MAX(PRICE) AS MAX_PRICE, PRODUCT_NAME
FROM FOOD_PRODUCT
WHERE CATEGORY IN ('과자', '국', '김치', '식용유')
GROUP BY CATEGORY
ORDER BY MAX_PRICE DESC;