https://school.programmers.co.kr/learn/courses/30/lessons/131123
코딩테스트 연습 > GROUP BY > 즐겨찾기가 가장 많은 식당 정보 출력하기
문제 분석
난이도: LEVEL3
문제 요구사항
REST_INFO 테이블에서 음식종류별로 즐겨찾기수가 가장 많은 식당의 음식 종류, ID, 식당 이름, 즐겨찾기수를 조회하는 SQL문을 작성해주세요.
이때 결과는 음식 종류를 기준으로 내림차순 정렬해주세요.
정답 코드 1
SELECT I.FOOD_TYPE, REST_ID, REST_NAME, I.FAVORITES
FROM REST_INFO I JOIN (SELECT FOOD_TYPE, MAX(FAVORITES) FAVORITES
FROM REST_INFO
GROUP BY FOOD_TYPE
) R
ON I.FOOD_TYPE = R.FOOD_TYPE AND I.FAVORITES = R.FAVORITES
ORDER BY 1 DESC
REST_INFO 서브 쿼리: GROUP BY FOOD_TYPE / SELECT FOOD_TYPE, MAX(FAVORITES)
REST_INFO 테이블과 서브 쿼리 결과를 기준으로 INNER JOIN
나온 결과를 음식 종류를 기준으로 내림차순 정렬
정답 코드 2
WITH CTE AS (
SELECT FOOD_TYPE, MAX(FAVORITES) FAVORITES
FROM REST_INFO
GROUP BY FOOD_TYPE
)
SELECT I.FOOD_TYPE, REST_ID, REST_NAME, I.FAVORITES
FROM REST_INFO I JOIN CTE C
ON I.FOOD_TYPE = C.FOOD_TYPE AND C.FAVORITES = I.FAVORITES
ORDER BY 1 DESC
정답 코드1에서 서브 쿼리를 CTE로 변경
정답 코드 3
WITH CTE AS (
SELECT FOOD_TYPE, MAX(FAVORITES) FAVORITES
FROM REST_INFO
GROUP BY FOOD_TYPE
)
SELECT FOOD_TYPE, REST_ID, REST_NAME, FAVORITES
FROM REST_INFO I
WHERE FAVORITES = (SELECT FAVORITES
FROM CTE C
WHERE I.FOOD_TYPE = C.FOOD_TYPE)
ORDER BY 1 DESC
조인이 아닌 CTE를 WHERE 절에서 서브쿼리로 활용
'Algorithm > Programmers SQL' 카테고리의 다른 글
[MySQL] 프로그래머스 헤비 유저가 소유한 장소 (0) | 2024.09.16 |
---|---|
[MySQL] 프로그래머스 조건별로 분류하여 주문상태 출력하기 (0) | 2024.09.16 |
[MySQL] 프로그래머스 카테고리 별 도서 판매량 집계하기 (1) | 2024.09.16 |
[MySQL] 프로그래머스 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기 (0) | 2024.09.16 |
[MySQL] 프로그래머스 자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기 (0) | 2024.09.16 |