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

Dreamer·2025년 5월 28일

문제

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

나의 풀이

  1. 서브 쿼리 작성 전

    서브쿼리로 조회할 정보 : 음식 종류별로 즐겨찾기수가 가장 많은 식당

SELECT
    FOOD_TYPE,
    REST_ID,
    REST_NAME,
    FAVORITES
FROM REST_INFO 
WHERE (SELECT) -- 미완성
ORDER BY FOOD_TYPE DESC
  1. 완성된 쿼리문 : 서브쿼리 사용
SELECT
    FOOD_TYPE,
    REST_ID,
    REST_NAME,
    FAVORITES
FROM REST_INFO r1
WHERE FAVORITES = (
    SELECT MAX(FAVORITES)
    FROM REST_INFO r2
    WHERE r2.FOOD_TYPE = r1.FOOD_TYPE
)
ORDER BY FOOD_TYPE DESC
  1. 서브쿼리에 윈도우 함수 사용

    윈도우 함수 (Window Function)
    윈도우 함수는 행과 행 간의 관계를 쉽게 정의하기 위해 만들어진 함수
    GROUP BY 없이도 그룹핑 연산을 수행할 수 있는 기능

SELECT 
    FOOD_TYPE,
    REST_ID,
    REST_NAME,
    FAVORITES
FROM (
    SELECT 
        FOOD_TYPE,
        REST_ID,
        REST_NAME,
        FAVORITES,
        ROW_NUMBER() OVER (PARTITION BY FOOD_TYPE ORDER BY FAVORITES DESC) as rn
    FROM REST_INFO
) ranked
WHERE rn = 1
ORDER BY FOOD_TYPE DESC;
profile
Moving forward based on records

0개의 댓글