식품분류별 가장 비싼 식품의 정보 조회하기

FOOD_PRODUCT 테이블에서 식품분류별로 가격이 제일 비싼 식품의 분류, 가격, 이름을 조회하는 SQL문을 작성해주세요. 이때 식품분류가 '과자', '국', '김치', '식용유'인 경우만 출력시켜 주시고 결과는 식품 가격을 기준으로 내림차순 정렬해주세요.

식품분류별 가장 비싼 식품의 정보 조회하기Lv.4

131116

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

해설

FOOD_PRODUCT라는 테이블에서 특정 카테고리('과자', '국', '김치', '식용유')에 속하는 제품 중에서 각 카테고리별로 가장 비싼 제품의 정보를 검색하고, 그 결과를 가격에 따라 내림차순으로 정렬합니다.

  • Name
    SELECT
    Type
    Description

    FP.CATEGORY, FP.PRICE, FP.PRODUCT_NAME: FOOD_PRODUCT 테이블의 카테고리, 가격, 제품 이름을 선택합니다.

  • Name
    INNER JOIN
    Type
    Description

    서브쿼리 (SELECT CATEGORY, MAX(PRICE) AS MAX_PRICE FROM FOOD_PRODUCT WHERE CATEGORY IN ('과자', '국', '김치', '식용유') GROUP BY CATEGORY)를 사용하여 특정 카테고리('과자', '국', '김치', '식용유')에 대해 각 카테고리별로 가장 높은 가격을 계산합니다.

    중요한 점은 메인 쿼리의 FOOD_PRODUCT FP 테이블과 서브쿼리 결과를 조인해야 합니다. 조인 조건은 FP.CATEGORY = MAX_PRICES.CATEGORY AND FP.PRICE = MAX_PRICES.MAX_PRICE입니다. 즉, 카테고리가 같고 가격이 해당 카테고리의 최대 가격과 일치하는 레코드만 조인됩니다.

  • Name
    ORDER BY
    Type
    Description

    결과는 FP.PRICE DESC에 따라 가격이 높은 순서대로 내림차순으로 정렬됩니다.

식품분류별 가장 비싼 식품의 정보 조회하기

SELECT
    FP.CATEGORY,
    FP.PRICE,
    FP.PRODUCT_NAME
FROM
    FOOD_PRODUCT FP
INNER JOIN
    (SELECT CATEGORY, MAX(PRICE) AS MAX_PRICE FROM FOOD_PRODUCT WHERE CATEGORY IN ('과자', '국', '김치', '식용유') GROUP BY CATEGORY) AS MAX_PRICES
ON
    FP.CATEGORY = MAX_PRICES.CATEGORY AND FP.PRICE = MAX_PRICES.MAX_PRICE
ORDER BY
    FP.PRICE DESC;