[SQL] group by후 select에 max()

도리·2025년 2월 18일

programmers (group by) lv3 즐겨찾기가 가장 많은 식당 정보 출력하기

이 문제가 언뜻보기에는 매우 쉬워보였다.

문제

REST_INFO 테이블에서
음식종류별로 즐겨찾기수가 가장 많은 식당의
(음식 종류, ID, 식당 이름, 즐겨찾기수) 조회하기.

내 코드

SELECT food_type, rest_id,rest_name,max(favorites) as favorites
from rest_info
group by food_type
order by food_type desc

틀린 이유

  • group by food_type 후, select food_type, max(favorites) 를 하면 제대로 정보가 나온다.
  • 하지만 rest_id, rest_name의 경우 group by 후 상단의 데이터가 나온다. (favorites값과 매칭안됨)

    왠만하면 서브쿼리로 group by 해준 후 이를 join하여 활용하는 것이 좋다.

  • group by 함수 적용 후 특징을 제대로 알지 못하여 틀림

정답 코드

SELECT r.food_type,
       r.rest_id,
       r.rest_name,
       r.favorites
FROM rest_info r
JOIN (
    SELECT food_type, MAX(favorites) AS max_favorites
    FROM rest_info
    GROUP BY food_type
) m ON r.food_type = m.food_type AND r.favorites = m.max_favorites
ORDER BY r.food_type DESC;

join시 food_type과 favorite 값이 모두 일치해야 한다

서브쿼리에 원하는 조건을 추출하고, 메인쿼리에서는 이를 만족하는 조건들과 나머지 조건들을 합친다는 느낌을 항상 기억하자.

profile
인공지능응용학과 졸업예정..

0개의 댓글