문제에서 원하는 것은
1. 음식종류별로 즐겨찾기가 가장 많은 식당의 정보
2. 음식 종류를 기준으로 내림차순 정렬
위 테이블을 보고 문제를 해결해 보도록 하겠다.
먼저 1. 음식종류별로 즐겨찾기가 가장 많은 식당의 정보를 얻기 위해서는 우선적으로 음식 종류별로 그룹화를 해야 할 것이다.
GROUP BY FOOD_TYPE
GROUP BY절을 이용하여 그룹화를 하고, 이제 이 그룹 속에서 즐겨찾기가 가장 많은 식당의 정보를 얻으려면 MAX를 사용하여 그룹 내에서 가장 즐겨 찾기가 많은 데이터를 찾을 수 있고.
이 데이터를 가지고 즐겨찾기가 가장 큰 식당의 정보를 알기 위해서는 현재 sql문을 서브쿼로 사용하면 된다.
SELECT MAX(FAVORITES) FAVORITES, FOOD_TYPE
FROM REST_INFO
GROUP BY FOOD_TYPE
MAX값 만을 가지고 있어서는 다른 음식 종류에서 같은 즐겨찾기의 개수를 가지고 있을 수 있으므로 해당 sql에서 음식종류 또한 같이 알 수 있도록 한다.
그러면 이제 해당 음식종류의 가장 많은 즐겨찾기의 개수가 무엇인지를 알게되었고 이 서브 쿼리에 JOIN을 하면 원하는 값을 얻을 수 있고 INNER JOIN을 사용하여 음식의 종류가 같고, 즐겨찾기의 개수가 동일한 데이터 행만 가져올 수 있도록 하겠다.
FROM REST_INFO A INNER JOIN (SELECT MAX(FAVORITES) FAVORITES, FOOD_TYPE
FROM REST_INFO
GROUP BY FOOD_TYPE) B
ON A.FAVORITES = B.FAVORITES AND A.FOOD_TYPE = B.FOOD_TYPE
이러면 이제 가장 즐겨찾기가 많은 식당들의 정보를 얻어 왔으니 1번은 해결 된 것이다.
마지막으로 음식 종류를 기준으로 내림차순 정렬을ORDER BY 절으로 정렬을 하면
ORDER BY A.FOOD_TYPE DESC;
위처럼 작성을 할 수 있고
다 합친 sql문은 아래와 같을 것이다.
SELECT A.FOOD_TYPE, A.REST_ID, A.REST_NAME, A.FAVORITES
FROM REST_INFO A INNER JOIN (SELECT MAX(FAVORITES) FAVORITES, FOOD_TYPE
FROM REST_INFO
GROUP BY FOOD_TYPE) B
ON A.FAVORITES = B.FAVORITES AND A.FOOD_TYPE = B.FOOD_TYPE
ORDER BY A.FOOD_TYPE DESC;
'코딩테스트' 카테고리의 다른 글
프로그래머스 없어진 기록 찾기 (0) | 2023.09.06 |
---|---|
프로그래머스 대여 기록이 존재하는 자동차 리스트 구하기 (0) | 2023.09.05 |
프로그래머스 조건에 맞는 사용자와 총 거래금액 조회하기 (0) | 2023.09.04 |
프로그래머스 조건별로 분류하여 주문상태 출력하기 (0) | 2023.09.04 |
프로그래머스 카테고리 별 도서 판매량 집계하기 (0) | 2023.09.03 |