[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