코딩테스트/SQL

[SQL][GROUP BY][IN] 식품분류별 가장 비싼 식품의 정보 조회하기

박소민 2025. 4. 25. 13:46
식품분류별 가장 비싼 식품의 정보 조회하기
 

프로그래머스

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

programmers.co.kr

 

  • 풀이
    • 📍GROUP BY를 썼을 때 SELECT에 나오는 컬럼은
      • GROUP BY 항목이거나,
      • 집계 함수(MAX, COUNT, SUM 등)를 써야 함
# 이 쿼리가 안되는 이유
# PRICE는 집계함수로 지정이되지만
# PRODUCT_NAME에 무슨 값을 넣어줄 지가 정해지지 않음

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

 

 

  • 다른 풀이
    • IN
    • 📍 튜플 비교
      • 여러 항목을 동시에 IN 할수도 있음
      • 대신 찾는 항목의 수와 내부쿼리 항목 수가 같아야함
SELECT CATEGORY, PRICE AS MAX_PRICE, PRODUCT_NAME
FROM FOOD_PRODUCT
WHERE (CATEGORY, PRICE) IN (
    SELECT CATEGORY, MAX(PRICE) AS PRICE
    FROM FOOD_PRODUCT
    WHERE CATEGORY IN ('과자','국','김치','식용유')
    GROUP BY CATEGORY
)
ORDER BY MAX_PRICE DESC;