REST_INFO 테이블에서 음식종류별로 즐겨찾기수가 가장 많은 식당의 음식 종류, ID, 식당 이름, 즐겨찾기수를 조회하는 SQL문을 작성해주세요. 이때 결과는 음식 종류를 기준으로 내림차순 정렬해주세요.
SELECT origin.FOOD_TYPE, origin.REST_ID,origin.REST_NAME, origin.FAVORITES
FROM
(SELECT FOOD_TYPE, MAX(FAVORITES) AS FAVORITES FROM REST_INFO
GROUP BY FOOD_TYPE) AS grouped
INNER JOIN REST_INFO AS origin
ON origin.FOOD_TYPE=grouped.FOOD_TYPE
AND origin.FAVORITES=grouped.FAVORITES
ORDER BY origin.FOOD_TYPE DESC;
select에서 여러개의 칼럼을 조회할 때 group by를 사용한다면,
group by에 해당 칼럼들을 명시해줘야 한다.
예를 들어 코드가 다음과 같다면,
select r.FOOD_TYPE, r.REST_ID, MAX(r.FAVORITES) FROM REST_INFO AS R
GROUP BY r.FOOD_TYPE;
원래는 mysql 자체에서 에러를 뱉어야 한다. 왜냐하면 REST_ID는 그룹화가 안되어있기 때문이다.
그렇다고 해서 group by r.FOOD_TYPE, r.REST_ID
로 하면 원하는 그룹핑이 되지 않는다. 그래서 정답 코드처럼 서브 쿼리와 조인을 이용했다.