FOOD_TYPE으로 그룹을 짓고 SELECT 할 때 MAX(FAVORITES)을 이용하면 풀릴 것이라고 생각했습니다!
SELECT FOOD_TYPE , REST_ID , REST_NAME, MAX(FAVORITES) AS FAVORITES
FROM REST_INFO
GROUP BY FOOD_TYPE
ORDER BY FOOD_TYPE DESC
FOOD_TYPE | REST_ID | REST_NAME | FAVORITES |
---|---|---|---|
한식 | 00001 | 은돼지식당 | 734 |
중식 | 00015 | 만정 | 20 |
일식 | 00002 | 하이가쯔네 | 230 |
양식 | 00003 | 따띠따띠뜨 | 102 |
분식 | 00008 | 애플우스 | 151 |
결과가 위와 같이 나왔습니다.
일식 | 00002 | 하이가쯔네 | 112 |
---|
이것으로 답이 다릅니다.
위에 쓴 코드는 GROUP BY로 FOOD_TYPE 별로 그룹을 짓습니다. 허나 이때 FAVORITES 들 중 최대여야 하기 때문에 MAX를 써줍니다. 근데 FAVORITES은 그 그룹중 가장 최대값으로 들어가게 되지만 나머지값들은 그냥 첫번째로 오는 값이 들어가게 됩니다.
따라서 위와 같이 구현하면 안됩니다. 서브쿼리를 이용해서 구현해줍니다. FOOD_TYPE 과 FAVORITES를 서브쿼리에서 받아옵니다. 이때 FOOD_TYPE 별로 그룹을 지어줍니다. 이때 MAX(FAVORITES)를 해줍니다. 이름을 따로 받아오지 않고 음식 분류와 최대 좋아요 수만을 받아서 이 정보를 이용해서 메인 쿼리에서 값을 추출해냅니다.
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