문제
REST_INFO 테이블에서 음식종류별로 즐겨찾기수가 가장 많은 식당의 음식 종류, ID, 식당 이름, 즐겨찾기수를 조회하는 SQL문을 작성해주세요. 이때 결과는 음식 종류를 기준으로 내림차순 정렬해주세요.
💡 조건
1. 음식종류별로 묶기
2. 즐겨찾기수가 가장 많은 것을 추출
3. 음식 종류 기준으로 내림차순 정렬
처음 코드는 위와 같이 짰다. 근데 이 경우 자꾸 답이 아니라고 나오길래 찾아보니까 HAVING절은 결과값 기준으로 데이터를 비교한다고 한다. GROUP BY를 아무 조건 없이 하게 된다면 결과값 중에서 가장 상단에 있는 값이 그냥 나온다고 한다.
sql 코드
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
그래서 이걸 해결하기 위해서 서브쿼리로 FOOD_TYPE과 즐겨찾기 수가 많은 것을 받아오고 이 결과와 맞는 값으로 출력해주는거다. 내가 알아야할건 HAVING에서는 결과값 기준으로 데이터를 비교한다는 것, 안된다면 서브쿼리를 이용해보자는 것. 근데 아직 서브쿼리를 이용하는게 익숙치 않다. 추후에 서브쿼리만 따로 정리해두면 좋을 것 같다.