본문 바로가기
프로그래머스/코딩테스트 연습

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

by 포잉띠 2024. 4. 24.

 

테이블이 하나여서 

select category, max(price), product_name
from food_product
group by 1
having category in ("과자", "국", "김치", "식용유")
order by 2 desc

 

로 가볍게 group by 하고 조건 걸어서 필터링 했는데 가장 큰 값과 이름이 출력되지 않고

왜인지 다른게 출력되어 고생했다.

 

데이터분석 데브코스 스터디 함께 하고있는 귀인분의 도움을 받아 with절 응용하여 풀었다.

원인으로는 price에는 집계함수가 적용되었지만 product_name에는 적용되지 않아서 였다.

 

with a as (
SELECT MAX(PRICE) AS MAX_PRICE, CATEGORY
FROM FOOD_PRODUCT
GROUP BY 2
HAVING CATEGORY IN ("과자", "국", "김치", "식용유")
)
select f.CATEGORY, a.MAX_PRICE, f.PRODUCT_NAME
from FOOD_PRODUCT f
JOIN a a on a.CATEGORY = f.CATEGORY
WHERE a.MAX_PRICE = f.PRICE
order by 2 desc

 

with절에서 카테고리 별 가장 비싼 상품을 찾고

아래 본문 where절에서 category로 필터링 하는것이 아닌 price를 비교하여

with절의 최대 price를 가지고 카테고리가 같은 레코드의 상품 이름을 food_product 테이블에서 추출했다.

 

쉽지않은 문제였다.