SELECT CATEGORY
,PRICE as MAX_PRICE
,PRODUCT_NAME
FROM(SELECT CATEGORY
, PRODUCT_NAME
, PRICE
, RANK() OVER(PARTITION BY CATEGORY ORDER BY PRICE DESC) AS rnk
FROM FOOD_PRODUCT
WHERE CATEGORY IN ('과자','국','김치','식용유')
GROUP BY CATEGORY,PRODUCT_NAME
ORDER BY CATEGORY, PRICE DESC) as A
WHERE rnk = 1
ORDER BY PRICE DESC
- 문제에 제시된 CATEGORY 에 해당하는 품목만
IN
으로 필터한뒤- 'CATEGORY', 'PRODUCT_NAME' 순으로
GROUP BY
하여 내림차순으로 카테고리별 가격을 정렬하면 아래와 같은 테이블이 형성됩니다. 각 카테고리별 가격이 높은 품목순으로 정렬 되어있는데요!
여기서 문제의 핵심은 각 카테고리별 높은 PRICE에 해당하는 제품만 가져와야 하기 때문에!
RANK
함수를 이용해서 CATEGORY 별로 순위를 매긴다음 , RANK 가 1에 해당하는 행만 가져오는 아이디어를 이용했습니다.RANK() OVER(PARTITION BY CATEGORY ORDER BY PRICE DESC) AS rnk
그럼 아래와 같이 카테고리별 price의 rnk 값이 붙고 주어진 조건에 필터링 하면 끝!