sql은 정말 알다가도 모르겠다..
맞은 답
SELECT CATEGORY, MAX(PRICE) MAX_PRICE, PRODUCT_NAME
FROM FOOD_PRODUCT
WHERE CATEGORY IN ('과자','국','김치','식용유') and price in (select max(price) from food_product group by category)
GROUP BY CATEGORY
ORDER BY max_PRICE DESC
틀렸던 답
SELECT CATEGORY, MAX(PRICE) MAX_PRICE, PRODUCT_NAME
FROM FOOD_PRODUCT
WHERE CATEGORY IN ('과자','국','김치','식용유')
GROUP BY CATEGORY
ORDER BY max_PRICE DESC
식용유랑 과자 카테고리가 가격은 같은데 이름이 다르다
식용유는 이름이 가나다 순으로 더 빠른데
과자는 더 느려서 이것도 이유가 아닌 것 같고
테이블에 저장된 순서 상으로 더 빠른 애가 나와야하는데 그렇지 않았던 게 문제였을까???
엥근데 전체 테이블을 조회해보니까 애초에 콩기름은 8950원이 아니고 포카칩도 1950원이 아니다.. 애초에 가격과 대응되는 이름이 나온 게 아니라 PRODUCT_NAME
은 테이블에 저장된 순서로 카테고리별 제일 빠른 애가 나온 거였다.. 왜 이렇게 나오지..?
PRICE IN ()
이 문법이 아무래도 그냥 운이 좋아서 맞은 것 같아서(카테고리 별 최댓값 중 중복이 있었으면 틀렸을 수도 있을 것 같아서) 찾아보니 이런 답이 있었다. 이렇게 푸는 게 정석인 것 같다
-- https://school.programmers.co.kr/questions/43167
with
temp_01 as
(
SELECT CATEGORY, max(PRICE) as MAX_PRICE
from FOOD_PRODUCT
where category in ('과자', '국', '김치', '식용유')
group by CATEGORY
)
select f.CATEGORY, MAX_PRICE, f.PRODUCT_NAME
from food_product f
join temp_01 t on t.category = f.category
where price = max_price
order by max_price DESC