문제
풀이
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;
SELECT FOOD_TYPE, REST_ID, REST_NAME, MAX(FAVORITES)
FROM REST_INFO
GROUP BY FOOD_TYPE
ORDER BY FOOD_TYPE DESC;
이렇게 쿼리를 쳐서 결과를 뽑으면 안되나 할 수도 있지만, 해당 문제는 서브쿼리를 이용해야한다.
서브쿼리를 사용해야하는 이유는 다음과 같음!
서브쿼리에 해당하는 쿼리 결과문을 쳐보면 다음과 같은 결과문이 나온다.
여기에 REST_NAME을 넣으면 MAX(FAVORITES) 에 해당하는 REST_NAME이 연결되지 않는데,
MAX(FAVORITES)는 가장 높은 값만 뽑아주는 거지, 그 관계성은 나타낼 수 없다.
따라서, 서브쿼리를 이용해 MAX(FAVORITES) 를 가지는 식당은 무엇인지에 대한 처리를 해줘야한다.
WHERE (FOOD_TYPE, FAVORITES) IN ( SELECT FOOD_TYPE, MAX(FAVORITES) FROM REST_INFO GROUP BY FOOD_TYPE)
해당 코드를 통해 FOOD_TYPE은 한식이고, MAX(FAVORITES) 값이 734 안에 들어가는 식당들을 뽑아주는 것으로 처리!
(한식이고 734인 값이 여러개일 수 있으니까 IN을 써줌)
FOOD_TYPE, FAVORTIES 처럼 여러개 값을 이용할 때는 IN 앞에 괄호로 항목 묶어서 사용하면 됨!