코딩테스트

[26.03.18 코테/회고(MySQL)]-즐겨찾기가 가장 많은 식당 정보 출력하기

지니248 2026. 3. 18. 11:37

Lv3. 즐겨찾기가 가장 많은 식당 정보 출력하기 (MySQL)

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

 

내가 작성한 코드

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;

 

새로 배운 코드

SELECT FOOD_TYPE, REST_ID, REST_NAME, FAVORITES
FROM (SELECT FOOD_TYPE, REST_ID, REST_NAME, FAVORITES,
             RANK() OVER (PARTITION BY FOOD_TYPE ORDER BY FAVORITES DESC) AS RNK
      FROM REST_INFO) AS SUB
WHERE RNK = 1
ORDER BY FOOD_TYPE DESC;

 

문제 회고

1. 윈도우 함수 

- 윈도우 함수의 순위함수를 사용하면 더 정교한 순위 제어가 가능하다

- RANK() : 공동 순위만큼 다음 순위를 건너뜀 (예: 1, 2, 2, 4)

- DENSE_RANK() : 공동 순위가 있어도 다음 순위를 이어서 부여 (예: 1, 2, 2, 3)

- ROW_NUMBER() : 값의 중복과 상관없이 무조건 고유한 번호 부여 (예: 1, 2, 3, 4)

- 윈도우 함수와 PARTITION BY를 함께 사용하면 전체 테이블이 아닌 데이터를 특정 그룹으로 나누어 그 안에서만 순위를 매김