https://school.programmers.co.kr/learn/courses/30/lessons/131116
select r.CATEGORY
, r.PRICE as MAX_PRICE
, r.PRODUCT_NAME
from (
select @rank := if(@cate = t.CATEGORY, @rank + 1, 1) as num
, @cate := t.CATEGORY
, t.CATEGORY
, t.PRICE
, t.PRODUCT_NAME
from (
SELECT a.PRODUCT_ID
, a.PRODUCT_NAME
, a.PRODUCT_CD
, a.CATEGORY
, a.PRICE
from FOOD_PRODUCT a
where a.CATEGORY in ('과자', '국', '김치', '식용유')
order by a.CATEGORY, a.PRICE desc
) t
) r
where r.num = 1
order by r.PRICE desc
select t.CATEGORY
, t.PRICE as MAX_PRICE
, t.PRODUCT_NAME
from (
SELECT a.PRODUCT_ID
, a.PRODUCT_NAME
, a.PRODUCT_CD
, a.CATEGORY
, a.PRICE
, rank() over(partition by a.CATEGORY order by max(a.PRICE) desc) as r
from FOOD_PRODUCT a
where a.CATEGORY in ('과자', '국', '김치', '식용유')
group by a.PRODUCT_ID
) t
where t.r = 1
order by t.PRICE desc
두가지 버전,
MYSQL 8부터 오라클 처럼 partition by를 지원하는 윈도우 함수가 가능하다. 핵 편함.
하지만, 5.7까지는 안되니깐, 여기선 변수를 사용한 처리가 가능하다.(자료구조상 사이즈 1개 짜리 큐를 이용하는 느낌?)
'서버 > DB' 카테고리의 다른 글
[프로그래머스/SQL] 상품을 구매한 회원 비율 구하기 (0) | 2023.02.21 |
---|---|
[프로그래머스/SQL] 년, 월, 성별 별 상품 구매 회원 수 구하기 (0) | 2023.02.21 |
[프로그래머스/SQL] 오프라인/온라인 판매 데이터 통합하기 (0) | 2023.02.21 |
MySQL InnoDB 테이블에서 최대 행의 갯수는? (maximum number of recoreds in mysql innodb) (0) | 2023.02.15 |
[MySQL] 계정 생성 및 권한부여 (0) | 2022.02.17 |