REST_INFO 테이블에서 음식종류별로 즐겨찾기수가 가장 많은 식당의 음식 종류, ID, 식당 이름, 즐겨찾기수를 조회하는 SQL문을 작성해주세요. 이때 결과는 음식 종류를 기준으로 내림차순 정렬해주세요.
문제링크
조건정리
1. 음식 종류별로 즐겨찾기수가 가장 많은 식당
2. 음식종류, ID, 식당이름, 즐겨찾기수 조회
3. 음식 종류 기준 내림차순 정렬
풀이
1. 가장 많이 > 를 보자마자 RANK or ROW NUMBER써야겠다고 생각
SELECT FOOD_TYPE,
REST_ID,
REST_NAME,
FAVORITES,
ROW_NUMBER() OVER(PARTITION BY FOOD_TYPE ORDER BY FAVORITES DESC) AS RNK
FROM REST_INFO
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 RNK
FROM REST_INFO)a
WHERE RNK = 1
ORDER BY FOOD_TYPE DESC
풀이변형
WITH
써서 풀어보기😀
WITH rnk_fav AS
(
SELECT *,
ROW_NUMBER() OVER(PARTITION BY FOOD_TYPE ORDER BY FAVORITES DESC) AS RNK
FROM REST_INFO
)
SELECT FOOD_TYPE, REST_ID, REST_NAME, FAVORITES
FROM rnk_fav
WHERE RNK = 1
ORDER BY FOOD_TYPE DESC
다른사람 풀이
SELECT FOOD_TYPE, REST_ID, REST_NAME, FAVORITES
FROM REST_INFO
WHERE FAVORITES IN (SELECT MAX(FAVORITES)
FROM REST_INFO
GROUP BY FOOD_TYPE)
GROUP BY FOOD_TYPE
ORDER BY FOOD_TYPE DESC
나는 아직 이렇게는 쓰기 어려운 것 같다
WHERE 절에서 서브쿼리를 쓰는 개념이 아직 어려움