-
Notifications
You must be signed in to change notification settings - Fork 0
MySQL | 즐겨찾기가 가장 많은 식당 정보 출력하기 #1
Copy link
Copy link
Open
Description
문제
REST_INFO 테이블에서 음식종류별로 즐겨찾기수가 가장 많은 식당의 음식 종류, ID, 식당 이름, 즐겨찾기수를 조회하는 SQL문을 작성해주세요. 이때 결과는 음식 종류를 기준으로 내림차순 정렬해주세요
FOOD_TYPE별 로 묶어서 FAVORITES 수를 기준으로 내림차로 정렬
SELECT FOOD_TYPE, REST_ID, REST_NAME, FAVORITES,
ROW_NUMBER() OVER(PARTITION BY FOOD_TYPE ORDER BY FAVORITES DESC) as rn
FROM REST_INFO
순위가 1인 데이터만 선택해 음식 종류를 기준으로 내림차순 정렬한다
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;
ROW_NUMBER()
- 각 PARTITION 내에서 ORDER BY절에 의해 정렬된 순서를 기준으로 고유한 값을 반환하는 함수 , 행에 번호를 부여
ROW_NUMBER() OVER(PARTITION BY [그룹핑할 컬럼] ORDER BY [정렬할 컬럼])
- PARTITION BY는 선택, ORDER BY는 필수
-
RANK() : 1등이 두명이면, 그 다음 순위는 3등이 된다.
-
DENSE_RANK() : 1등이 두명이면 그 다음 순위는 2등이 된다.
-
ROW_NUMBER() 함수는 행에 번호를 부여
-
OVER() 함수 내부에 PARTITION BY FOOD_TYPE 구문은 데이터를 FOOD_TYPE 컬럼을 기준으로 그룹화한다.
-
즉, 같은 음식 종류를 가진 데이터끼리 묶어 출력한다.
-
ORDER BY FAVORITES DESC는 각 그룹 내에서 FAVORITES 컬럼을 내림차순으로 정렬한다.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels