728x90
문제 출처
https://school.programmers.co.kr/learn/courses/30/lessons/131116
풀이 과정
문제
혼자 풀어보니 자꾸 오류가 나서 왜 그럴까 고민해 보았더니 GROUP BY, MAX를 하면 PRODUCT_NAME 이 사라지게 된다.
SELECT CATEGORY, MAX(PRICE) MAX_PRICE, PRODUCT_NAME
FROM FOOD_PRODUCT
WHERE CATEGORY IN ('과자', '국', '김치', '식용유')
GROUP BY CATEGORY
ORDER BY MAX(PRICE) DESC;
이를 해결하기 위해 여러가지 풀이를 찾아보고 해결하였다
< Group By 최대값을 가진 Row를 추출하는 쿼리 >
SELECT a.CATEGORY, a.PRICE as MAX_PRICE, a.PRODUCT_NAME
FROM FOOD_PRODUCT a
LEFT JOIN FOOD_PRODUCT b
ON a.CATEGORY = b.CATEGORY AND a.PRICE < b.PRICE
WHERE b.CATEGORY IS NULL AND a.CATEGORY IN ('과자','국','김치','식용유')
ORDER BY 2 desc;
- Group By 키워드를 사용하지 않고 최대값을 찾는 쿼리
- Self Left Join을 통해 가지고 올수 있다.
- `b.category`가 NULL 이라면 `a.category`가 최대값이기 때문에 최대값을 가진 row값을 추출을 할수가 있다.
< 서브쿼리를 이용한 풀이 >
SELECT CATEGORY, PRICE, PRODUCT_NAME
FROM FOOD_PRODUCT
WHERE PRICE IN (
SELECT MAX(PRICE)
FROM FOOD_PRODUCT
GROUP BY CATEGORY
) AND CATEGORY IN ('과자','국','김치','식용유')
ORDER BY PRICE DESC
< PARTITION BY 를 이용한 풀이 >
-- 식품분류별로 가격이 제일 비싼 식품의 분류, 가격, 이름을 조회
-- 식품분류가 '과자', '국', '김치', '식용유'인 경우만 출력
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;
출처
GROUP BY 키워드를 사용하지 않고 최대값을 찾는 쿼리
https://helloino.tistory.com/120
문제
728x90
'SQL > CODING TEST' 카테고리의 다른 글
[programmers] 대장균의 크기에 따라 분류하기 1 (0) | 2024.05.23 |
---|