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를 함께 사용하면 전체 테이블이 아닌 데이터를 특정 그룹으로 나누어 그 안에서만 순위를 매김
'코딩테스트' 카테고리의 다른 글
| [26.03.20 코테/회고(MySQL)]-업그레이드 할 수 없는 아이템 구하기 (0) | 2026.03.20 |
|---|---|
| [26.03.19 코테/회고(MySQL)]-주문량이 많은 아이스크림 조회하기 (0) | 2026.03.19 |
| [26.03.17 코테/회고(MySQL/Oracle)]-그룹별 조건에 맞는 식당 목록 출력하기 (0) | 2026.03.17 |
| [26.03.16 코테/회고(MySQL/Oracle)]-자동차 대여 기록 별 대여 금액 구하기 (0) | 2026.03.16 |
| [26.03.13 코테/회고(MySQL/Oracle)]-자동차 대여 기록에서 대여중/대여 가능 여부 구분하기 (0) | 2026.03.13 |