프로그래머스 :
https://school.programmers.co.kr/learn/courses/30/lessons/131123
내가 처음에 짠 쿼리 : 안됨 왜일까?
SELECT FOOD_TYPE, REST_ID, REST_NAME, MAX(FAVORITES) FROM REST_INFO GROUP BY FOOD_TYPE, REST_ID, REST_NAME ORDER BY FOOD_TYPE DESC
출처 : https://school.programmers.co.kr/questions/38854
GROUP BY 로 묶으면 가장 상단에 있는 데이터를 임의로 가져옴.
SELECT를 해도 최대값을 가져오는 것이 아니라. 그룹화된 테이블 가장 상단을 가져오게 됨. 그래서 서브쿼리로 최댓값을 찾아주는것.
위 쿼리는 운좋게 가장 상단의 값이 일치하지만. 일식은 답과 다름.
정답
SELECT A.FOOD_TYPE, B.REST_ID, B.REST_NAME, A.FAVORITES
FROM (
SELECT DISTINCT(FOOD_TYPE) AS FOOD_TYPE, MAX(FAVORITES) AS FAVORITES FROM REST_INFO
GROUP BY FOOD_TYPE
) A, REST_INFO B
WHERE A.FOOD_TYPE=B.FOOD_TYPE
AND A.FAVORITES = B.FAVORITES
ORDER BY FOOD_TYPE DESC
또한 id별로 MAX값 추출하는 쿼리 참고 :
https://helloino.tistory.com/120