https://school.programmers.co.kr/learn/courses/30/lessons/131123
문제
REST_INFO 테이블에서 음식종류별로 즐겨찾기수가 가장 많은 식당의 음식 종류, ID, 식당 이름, 즐겨찾기수를 조회하는 SQL문을 작성해주세요. 이때 결과는 음식 종류를 기준으로 내림차순 정렬해주세요.
틀린 코드
SELECT FOOD_TYPE, REST_ID, REST_NAME, FAVORITES
from rest_info
group by food_type
having FAVORITES in (select max(FAVORITES) from rest_info group by food_type)
order by food_type desc
정답
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
틀린 이유
having은 group by로 이미 묶은 상태에서 조건문을 적용하는 것이기에 group으로 묶은 상태로 최대 즐겨찾기 수를 적용하면 특정 음식 종류에 해당하는 값이 없을 수도 있다. 또한, 다른 음식종류에서 최대 값이 같을 수 있기 때문에 where에서 음식종류, 즐겨찾기 수가 동시에 일치하는 값을 찾는다.