Snoopy [GROUP BY] 27. 식품분류별 가장 비싼 식품의 정보 조회하기
코딩테스트/프로그래머스 SQL

[GROUP BY] 27. 식품분류별 가장 비싼 식품의 정보 조회하기

Sooyoon Jeong 2022. 11. 16.

👉 https://school.programmers.co.kr/learn/courses/30/lessons/131123

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요....

programmers.co.kr


🤔 문제 분석

1) REST_INFO 테이블에서

2) 음식종류별로 즐겨찾기수가 가장 많은 식당의

3) 음식 종류, ID, 식당 이름, 즐겨찾기수를 조회하는 SQL문을 작성해주세요.

4) 이때 결과는 음식 종류를 기준으로 내림차순 정렬해주세요.

 

💡 풀이

SELECT A.CATEGORY, A.PRICE, PRODUCT_NAME
FROM FOOD_PRODUCT AS A JOIN(
    SELECT CATEGORY, MAX(PRICE) AS MAX_PRICE
    FROM FOOD_PRODUCT
    GROUP BY CATEGORY
    ) AS B ON A.PRICE = B.MAX_PRICE
WHERE A.CATEGORY IN ("과자", "국", "김치", "식용유")
GROUP BY A.CATEGORY
ORDER BY B.MAX_PRICE DESC

 

❗BEFORE U GO

SELECT CATEGORY, MAX(PRICE) AS MAXPRICE, PRODUCTNAME 
FROM FOODPRODUCT
GROUP BY CATEGORY
HAVING CATEGORY IN ('과자','국','김치','식용유')
ORDER BY MAXPRICE DESC;

이렇게 작성할 경우 왜 안될까?

 

'CATEGORY'를 기준으로 group by 해주면, Max(price)는 잘 출력한다.

 

그런데, 그 다음에 오는 PRODUCT NAME이 group by로 묶이 category와 max(price)랑 관련없는 product_name이 나온다.

그래서 category, max(price)먼저 찾고 이걸 이용해서 join을 한 다음에 product_name을 찾아야 올바른 답이 나온다.

댓글