본문 바로가기
문제 풀이/프로그래머스

[MYSQL 12] 즐겨찾기가 가장 많은 식당 정보 출력하기

by hyeminigo 2024. 9. 4.

 

즐겨찾기가 가장 많은 식당 정보 출력하기  (LEVEL3)

 

음식종류별로 즐겨찾기수가 가장 많은 식당 출력 

내림차순 정렬

 


틀린코드

SELECT FOOD_TYPE, REST_ID, REST_NAME, MAX(FAVORITES) AS FAVORITES
FROM REST_INFO 
GROUP BY FOOD_TYPE
ORDER BY FOOD_TYPE DESC

 

MAX(FAVORITES) 는 각 음식별 제일 높은 수의 즐겨찾기 출력되지만, 그 점수가 REST_ID, REST_NAME의 FAVORITES 값이 아니다. 음식별로 기존 테이블 가장 상단에 있는 열을 가져온다. 

 

 

 

정답 코드

FOOD_TYPE 별로 MAX(FAVORITES) 를 구하고 이 FAVORITES 정보와 일치하는 가게 정보를 따로 검색해야 한다.

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;

 

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

 

 

MEMO

- 서브쿼리의 사용이유는 실행순서이다.

- 실행순서는 FROM > WHERE > GROUP BY > HAVING > SELECT > LIMIT 

(MAX 를 실행하는 것은 SELECT 이다. GROUP BY 에서 각 음식별 상단에 있는 가게 정보를 선택한 한 후이다. 즉, SELECT 은 이미 테이블은 완성되어 있고 해당 행만 가장 높은 추천수를 따로 검색한 것이다. )

 

 

참고

https://monawa.tistory.com/126

https://school.programmers.co.kr/questions/38854