Algorithm/Programmers SQL

[MySQL] 프로그래머스 즐겨찾기가 가장 많은 식당 정보 출력하기

제우제우 2024. 9. 16. 19:27

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

 

프로그래머스

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

programmers.co.kr

코딩테스트 연습 > 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 절에서 서브쿼리로 활용