알고리즘

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

truezero 2023. 8. 7. 18:10

✅ 코드

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

서브쿼리를 사용한 풀이입니다.

🔎 참고

SELECT FOOD_TYPE
    , REST_ID
    , REST_NAME
    , MAX(FAVORITES)
FROM REST_INFO
GROUP BY FOOD_TYPE
ORDER BY FOOD_TYPE DESC;

위 코드가 통과되지 않는 이유는 FOOD_TYPE, REST_ID, REST_NAME은 그룹화 이후 첫번째 행에 위치한 레코드에서 해당 값들을 가져오지만 MAX(FAVORITES)는 각 그룹별 최대값을 가져오기 때문입니다.

다시 말해서 첫 3개의 값들과 마지막 값은 동일한 레코드에서 가져온 값이 아니게 됩니다.