[Tools]/SQL 이것저것

[MySQL] 서브쿼리를 이용한 그룹 내 max 값만 뽑아오기

pjw250 2024. 10. 10. 09:13

코딩테스트 연습 - 즐겨찾기가 가장 많은 식당 정보 출력하기 | 프로그래머스 스쿨 (programmers.co.kr)

 

프로그래머스

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

programmers.co.kr

 

REST_INFO 라는 식당ID와, 식당이름, 음식종류 그리고 즐겨찾기된 숫자로 구성된 테이블이 있다.

이때, 음식종류 별 가장 많은 즐겨찾기를 받은 식당을 1개 씩만 출력해야한다. 그럼 아래와 같이 3개의 서브쿼리를 활용한 답안이 제시 된다. (1) 인라인 뷰, (2)와 (3) WHERE절 서브쿼리 그 밖에 JOIN으로도 해결할 수 있지만 쿼리 작성능이 효율적이지 않아서 제외 시켰다. 아래 3 가지 TYPE 중 인라인 뷰는 내가 작성한 답안이고 나머지는 따왔다.

SELECT R.FOOD_TYPE, R.REST_ID, R.REST_NAME, R.FAVORITES
FROM(SELECT FOOD_TYPE, MAX(FAVORITES) AS FAVORITES
    FROM REST_INFO
    GROUP BY FOOD_TYPE) AS T, REST_INFO AS R
WHERE R.FAVORITES = T.FAVORITES AND R.FOOD_TYPE = T.FOOD_TYPE
ORDER BY 1 DESC;

 

SELECT FOOD_TYPE, REST_ID, REST_NAME, FAVORITES
    FROM REST_INFO
    WHERE FAVORITES IN (SELECT MAX(FAVORITES)
            FROM REST_INFO
            GROUP BY FOOD_TYPE)
    GROUP BY FOOD_TYPE
    ORDER BY FOOD_TYPE DESC
select a.FOOD_TYPE, a.REST_ID, a.REST_NAME, a.FAVORITES
from REST_INFO a
where a.FAVORITES = 
(
    select max(b.FAVORITES)
    from REST_INFO b
    where a.FOOD_TYPE =b.FOOD_TYPE 
)
 order by 1 desc