노력에는 지름길이 없으니까요

프로그래머스 - 식품분류별 가장 비싼 식품의 정보 조회하기 본문

SQL/프로그래머스

프로그래머스 - 식품분류별 가장 비싼 식품의 정보 조회하기

데건 2024. 7. 10. 17:31
728x90

 

해결일 언어 레벨 테스트명
20240710 SQL level 4  식품분류별 가장 비싼 식품의 정보 조회하기

 

링크 : https://school.programmers.co.kr/learn/courses/30/lessons/131116

 

 


 

내 코드

SELECT
    A.CATEGORY,
    A.PRICE MAX_PRICE,
    PRODUCT_NAME
FROM FOOD_PRODUCT FP
JOIN (SELECT CATEGORY, MAX(PRICE) PRICE
      FROM FOOD_PRODUCT
     GROUP BY CATEGORY) A
USING (CATEGORY)
WHERE 1=1
AND FP.CATEGORY = A.CATEGORY
AND FP.PRICE = A.PRICE
GROUP BY CATEGORY
HAVING CATEGORY IN ('과자', '국', '김치', '식용유')
ORDER BY 2 DESC

 

 

 

개선점: 처음에 조인을 CATEGORY 말고 PRODUCT_ID로 해서 계속 하나의 값만 추출됐는데...

애초에 A 테이블에서 GROUP BY CAT~으로 묶는 과정에서 PRODUCT_ID의 의미가 없어졌음을 깨달았다

사실 이 문제는 한 세번 다시 풀었기 때문에 ㅋㅋㅋ 이제서야 당당하게 올리게 되어 기쁠 따름이다

 

베스트 코드

with shortlist as (
SELECT category, max(price) as max_price, product_name
from food_product
where category in ('과자','국','김치','식용유')
group by 1, 3
order by 2 desc) -- 2차 group by에서 대표값으로 사용하기 위해서

select *
from shortlist
group by 1;
SELECT A.CATEGORY, A.MAX_PRICE, A.PRODUCT_NAME
FROM (SELECT CATEGORY, PRICE,
      MAX(PRICE) OVER (PARTITION BY CATEGORY) MAX_PRICE, PRODUCT_NAME
      FROM FOOD_PRODUCT
      WHERE CATEGORY IN ('과자', '국', '김치', '식용유')) A
WHERE A.MAX_PRICE = A.PRICE
ORDER BY 2 DESC;

윈도우 함수를 사용한 예시를 찾아왔다...

PARTITION BY 잘 사용하고 싶다

 

728x90
반응형