문제: 음식종류별로 즐겨찾기 수가 가장 많은 식당 조회하기
단순히 GROUP BY
와 MAX
만을 사용하니 오답이 떴다.
그 이유는 GROUP BY
로 묶고 나서 SELECT
하면 가장 상단에 있는 데이터들을 임의로 가져오기 때문이다.
이는 쿼리 실행 순서와 관련이 있다.
: FROM
> WHERE
> GROUP BY
> HAVING
> SELECT
> ORDER BY
> LIMIT
서브쿼리로 최댓값을 찾은 후 비교하여 풀어야 한다.
SELECT FOOD_TYPE, REST_ID, REST_NAME, FAVORITES
FROM REST_INFO
WHERE FAVORITES = (SELECT MAX(FAVORITES)
FROM REST_INFO AS R
WHERE R.FOOD_TYPE = REST_INFO.FOOD_TYPE)
ORDER BY FOOD_TYPE DESC
SELECT R.FOOD_TYPE, R.REST_ID, R.REST_NAME, R.FAVORITES
FROM REST_INFO AS R JOIN (
SELECT FOOD_TYPE, MAX(FAVORITES) AS MAXFAV
FROM REST_INFO
GROUP BY FOOD_TYPE
) AS X
ON R.FOOD_TYPE = X.FOOD_TYPE AND R.FAVORITES = X.MAXFAV
ORDER BY R.FOOD_TYPE DESC
IN
절SELECT FOOD_TYPE, REST_ID, REST_NAME, FAVORITES
FROM REST_INFO
WHERE (FOOD_TYPE, FAVORITES) IN (
SELECT FOOD_TYPE, MAX(FAVORITES)
FROM REST_INFO
GROUP BY FOOD_TYPE)
ORDER BY FOOD_TYPE DESC