0612 til

looggi·2023년 6월 12일
0

TILs

목록 보기
91/114
post-thumbnail

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
profile
looooggi

0개의 댓글