테이블이 하나여서
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 테이블에서 추출했다.
쉽지않은 문제였다.
'프로그래머스 > 코딩테스트 연습' 카테고리의 다른 글
SQL lv4 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기 (3) | 2024.04.29 |
---|---|
SQL lv3 카테고리 별 도서 판매량 집계하기 (0) | 2024.04.24 |
SQL lv2 상품 별 오프라인 매출 구하기 (0) | 2024.04.24 |
SQL lv3 조건에 맞는 사용자와 총 거래금액 조회하기 (0) | 2024.04.22 |
SQL lv3 대여 기록이 있는 자동차 리스트 구하기 (0) | 2024.04.22 |