[SQL] 즐겨찾기가 가장 많은 식당 정보 출력하기

Ray·2025년 6월 10일

SQL

목록 보기
30/39

🔎 문제설명

  • 출처: 프로그래머스
  • 사용언어(RDBMS): SQL(MySQL)
  • 문제:

    REST_INFO 테이블에서 음식종류별로 즐겨찾기수가 가장 많은 식당의 음식 종류, ID, 식당 이름, 즐겨찾기수를 조회하는 SQL문을 작성해주세요. 이때 결과는 음식 종류를 기준으로 내림차순 정렬해주세요.




✅ 제출답안

# 답안1 - JOIN을 사용
WITH MAX_FAVORITES AS(
    SELECT FOOD_TYPE, MAX(FAVORITES) AS FAVORITES
    FROM REST_INFO
    GROUP BY FOOD_TYPE
)
SELECT M.FOOD_TYPE, R.REST_ID, R.REST_NAME, M.FAVORITES
FROM MAX_FAVORITES AS M LEFT JOIN REST_INFO AS R
USING(FOOD_TYPE, FAVORITES)
ORDER BY FOOD_TYPE DESC;
# 답안2 - 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;



🚀 풀이기록

처음에는 GROUP BY문으로 FOOD_TYPE을 기준으로 그룹화한다음, SELECT 문을 아래와 같이 작성했더니 틀렸다.

SELECT FOOD_TYPE, REST_ID, REST_NAME, MAX(FAVORITES) AS FAVORITES

생각해보면, FOOD_TYPE으로 그룹화했어도 REST_ID, REST_NAME에 대해 집계가 잡히지 않으니 오류없이 출력이 되었어도 사실은 틀렸다는 걸 의미했다. 문제를 읽었을 때는 쉬울줄 알았는데 10분 넘게 안 풀려서 시간재고 풀 당시에는 그냥 넘어갔었다. 앞으로 GROUP BY문을 사용할 때 이 부분을 주의해야 겠다.

추가적으로, 스터디원의 답안을 보며 WHERE문에서 반환한 서브쿼리의 여러쿼리의 쌍을 일치하는 행을 찾는게 가능하다는 사실도 알았다. 나중에 유용하게 쓰일 듯하다.

profile
미래의 독자인 나를 위해 글을 씁니다.

0개의 댓글