SELECT FOOD_TYPE, REST_ID, REST_NAME, COUNT(FAVORITES) AS FAVORITES
FROM REST_INFO
GROUP BY FOOD_TYPE
HAVING MAX(FAVORITES)
ORDER BY 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
WHERE (FOOD_TYPE, FAVORITES) IN ...
: 이 부분은 WHERE 절을 사용하여 검색 조건을 지정합니다. (FOOD_TYPE, FAVORITES) 쌍이 서브쿼리의 결과와 일치하는 행을 선택합니다.
(SELECT FOOD_TYPE, MAX(FAVORITES) FROM REST_INFO GROUP BY FOOD_TYPE)
: 이 부분은 서브쿼리를 나타냅니다. REST_INFO 테이블에서 FOOD_TYPE로 그룹화한 후, 각 그룹 내에서 가장 큰 FAVORITES 값을 찾습니다. 이 서브쿼리의 결과는 (FOOD_TYPE, MAX(FAVORITES)) 쌍의 집합이 됩니다.
GROUP BY 후 맨 첫줄 SELECT줄에 MAX를 해버리면 최대값이 아니라 테이블 최상단 값들을 임의로 가져온다. -> 그러므로 서브쿼리 작성해서 풀어야 한다.
서브쿼리를 쓰는 이유?
-> 다중 행 비교
: 서브쿼리를 사용하면 여러 행 중에서 가장 크거나 작은 값을 찾을 수 있습니다. 이 경우, 메인 쿼리에서는 서브쿼리의 결과와 여러 행을 비교하여 원하는 조건을 충족하는 행을 선택합니다.
(FOOD_TYPE, FAVORITES) 쌍이 서브쿼리의 결과와 일치하는 행을 선택하는 거니까. 'FOOD_TYPE, FAVORITES'이 소괄호로 하나의 행으로 묶여야한다. 안 그러면 오류남.