[SQL 오답] 즐겨찾기가 가장 많은 식당 정보 출력하기(GROUP BY의 성격)

byeol·2023년 4월 28일
0

접근

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

이 문제를 통해서 새롭게 알게 된 것이 있어 정리해보려고 합니다.
GROUP BY를 통해서 그룹을 만들고
그 그룹 안에서 MAX값을 뽑으려고 할 때

SELECT MAX(FAVORITES), REST_NAME
FROM REST_INFO
GROUP BY FOOD_TYPE

위와 같이 하면 그 그룹 안에 있는 가장 큰 값을 가진 식당의 이름(REST_NAME)이 나올 것이라고 예상할 수도 있습니다.

하지만 그렇지 않습니다.

FOOD_TYPEREST_NAMEFAVORITES
한식온면40
일식아쯔다무라50
한식소박100

위와 같이 테이블이 있다면

FOOD_TYPEREST_NAME
한식온면100
일식아쯔다무라50

위의 결과가 나옵니다.
음식 종류에 따른 최댓값은 나오나 그 최대값을 가지는 식당의 이름이 나오는 것이 아니라
원래 테이블 상에 그룹을 만든 첫번째 식당의 이름이 나온다는 것을 기억해야 합니다.

따라서 정답은 아래와 같습니다.

풀이

SELECT FOOD_TYPE, REST_ID, REST_NAME, FAVORITES
FROM REST_INFO
WHERE (FAVORITES,FOOD_TYPE) IN (
  SELECT MAX(FAVORITES), FOOD_TYPE
  FROM REST_INFO
  GROUP BY FOOD_TYPE
)
GROUP BY FOOD_TYPE
ORDER BY FOOD_TYPE DESC
profile
꾸준하게 Ready, Set, Go!

0개의 댓글