REST_INFO 테이블에서
음식종류별로 즐겨찾기수가 가장 많은 식당의
음식 종류, ID, 식당 이름, 즐겨찾기수를 조회하는 SQL문을 작성해주세요.
이때 결과는 음식 종류를 기준으로 내림차순 정렬해주세요.
WITH FOOD AS(
SELECT FOOD_TYPE, MAX(FAVORITES) AS FAV_COUNT
FROM REST_INFO
GROUP BY FOOD_TYPE)
SELECT R.FOOD_TYPE, REST_ID, REST_NAME, FAVORITES
FROM REST_INFO R JOIN FOOD F ON R.FOOD_TYPE=F.FOOD_TYPE AND R.FAVORITES=F.FAV_COUNT
ORDER BY R.FOOD_TYPE DESC
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
첫 번째 풀이 방법은 WITH로 임시 테이블을 만들어서 음식종류별로 Grouping을 하고, 각 음식종류별로 가장 높은 즐겨찾기수를 SELECT했다.
이를 이용해서 REST_INFO 테이블과 JOIN을 하는데, FOOD_TYPE은 UNIQUE하지 않기 때문에 FAVORITES가 그룹 별 최대값이라는 조건(R.FAVORITES = F.FAV_COUNT)을 추가하여 최대한 중복의 가능성을 줄였다.
두 번째 풀이 방법은 식품분류별 가장 비싼 식품의 정보 조회하기 때와 똑같이 WHERE절에서 서브 쿼리를 사용하여 조건을 처리하는 방식이다.