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

728x90

문제 설명

 

다음은 식품의 정보를 담은 FOOD_PRODUCT 테이블입니다. FOOD_PRODUCT 테이블은 다음과 같으며 PRODUCT_ID, PRODUCT_NAME, PRODUCT_CD, CATEGORY, PRICE는 식품 ID, 식품 이름, 식품코드, 식품분류, 식품 가격을 의미합니다.

 

문제

 

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

 

내 풀이(오답)

SELECT CATEGORY , MAX(PRICE) AS MAX_PRICE, PRODUCT_NAME
FROM FOOD_PRODUCT
GROUP BY CATEGORY 
HAVING CATEGORY IN ('과자', '국', '김치', '식용유')
ORDER BY PRICE DESC
  • 식품분류별로 '가장 비싼 식품'을 먼저 구한 다음에 그 식품들의 정보를 추출해야 함
  • 내 풀이는 식품분류별로 '가장 비싼 식품만'을 구한 것

 

풀이

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

 

  • WHERE CATEGORY IN ('과자', '국', '김치', '식용유'): 해당 카테고리만 선택하도록 필터링
  • SELECT MAX(PRICE), CATEGORY: 각 카테고리별로 가장 비싼 가격을 선택
  • GROUP BY CATEGORY: 카테고리별로 그룹화하여 가장 비싼 가격
  • AND (PRICE, CATEGORY) IN (SELECT MAX(PRICE), CATEGORY ...): 각 카테고리에서 가장 높은 가격을 가진 제품을 선택

 

 

728x90