본문 바로가기

Algorithm/프로그래머스

[SQL] 즐겨찾기가 가장 많은 식당 정보 출력하기 / 왜 MAX()가 안될까?

 

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

그냥 보기에는 간단한 문제여서 group by 를 사용하여 max()로 출력해주었지만 답이 틀리게 나온다.

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

 

왜 MAX()는 안될까??

그 해답은 아래의 글에 작성되어있다.

 

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

결론은 max()로 큰 값이 나오는 것이 아니라 그냥 맨 위의 값을 출력하는 거였다....

 

그렇다면 max()가 아니라 서브쿼리를 사용해서 즐찾이 가장 큰 값을 추려내야 한다.

 

일단 테이블의 모든 쿼리를 SELECT하고 WHERE절을 통해서 가장 큰 값을 서브쿼리로 뽑아내고 비교해서 출력을 해야한다.

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