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

다음은 식당의 정보를 담은 REST_INFO 테이블입니다. REST_INFO 테이블은 다음과 같으며 REST_ID, REST_NAME, FOOD_TYPE, VIEWS, FAVORITES, PARKING_LOT, ADDRESS, TEL은 식당 ID, 식당 이름, 음식 종류, 조회수, 즐겨찾기수, 주차장 유무, 주소, 전화번호를 의미합니다.

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

즐겨찾기가 가장 많은 식당 정보 출력하기Lv.3

131123

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

해설

REST_INFO라는 테이블에서 음식 유형별로 가장 많은 즐겨찾기를 가진 레스토랑의 정보를 검색하고, 그 결과를 음식 유형에 따라 내림차순으로 정렬합니다.

  • Name
    SELECT
    Type
    Description

    2개의 테이블을 사용해야하기 때문에, 결과값을 반환할 테이블을 RI라는 별칭을 사용하겠습니다.

    RI.FOOD_TYPE, RI.REST_ID, RI.REST_NAME, RI.FAVORITES를 선택합니다. 이는 REST_INFO 테이블의 음식 유형, 레스토랑 ID, 레스토랑 이름, 즐겨찾기 수를 나타냅니다.

  • Name
    JOIN
    Type
    Description

    문제 풀이에 있어, 가장 중요한 부분입니다. 조건이 2개 붙었습니다. 음식 유형이 가장 많으면서 즐겨찾기도 많아야 합니다.

    서브쿼리 (SELECT FOOD_TYPE, MAX(FAVORITES) AS MAX_FAVORITES FROM REST_INFO GROUP BY FOOD_TYPE)를 사용하여 각 음식 유형별로 가장 많은 즐겨찾기 수를 계산합니다. 이 서브쿼리는 FOOD_TYPE과 MAX_FAVORITES (최대 즐겨찾기 수) 컬럼을 반환합니다.

    • RI.FOOD_TYPE = MAX_FAVORITES.FOOD_TYPE AND RI.FAVORITES = MAX_FAVORITES.MAX_FAVORITES입니다. 즉, 음식 유형이 같고 즐겨찾기 수가 그 음식 유형의 최대 즐겨찾기 수와 일치하는 레코드만 조인됩니다.
  • Name
    ORDER BY
    Type
    Description

    RI.FOOD_TYPE DESC에 따라 내림차순으로 정렬됩니다.

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

SELECT
    RI.FOOD_TYPE, RI.REST_ID, RI.REST_NAME, RI.FAVORITES
FROM
    REST_INFO RI
JOIN
    (SELECT FOOD_TYPE, MAX(FAVORITES) AS MAX_FAVORITES FROM REST_INFO GROUP BY FOOD_TYPE) AS MAX_FAVORITES
ON RI.FOOD_TYPE = MAX_FAVORITES.FOOD_TYPE
AND RI.FAVORITES = MAX_FAVORITES.MAX_FAVORITES
ORDER BY
    RI.FOOD_TYPE DESC;