문제 : https://school.programmers.co.kr/learn/courses/30/lessons/131123
FOOD_TYPE 별 좋아요 수가 젤 많은 행 한건만 출력해야 함.
<시도1. group by ~ having 절 사용>
- FOOD_TYPE별로 그룹화 한 후, having에 max 조건을 걸어 좋아요수가 젤 많은 음식점 한건만 출력하려 했음.
- 문제 : 단순히 젤 첫번째 FOOD_TYPE 행만 나오고, max 요건은 따지지 않음.
- 이유
: having은 group by에서 집계한 결과물에서 단순히 filter하는 역할이다. 때문에 max()를 이용해 새로운 연산을 할 수 없다.
: having 뒤에는 조건이 나와야 하는데 이건 단순히 max함수를 실행해서 값을 조회한 것이기 때문에, 이건 조건문이 아니다!
만일 having max(FAVORITES)> 1000 이런 코드였다면 올바른 조건이기 때문에 유효한 코드가 될 것이다.
select * from REST_INFO group by FOOD_TYPE having(max(FAVORITES))
<시도2. 그룹화 한 후, 집계함수 max로 행 조회 >
select * , max(FAVORITES) from REST_INFO group by FOOD_TYPE
- 기존 테이블과 max값을 조회한 테이블을 조인시키는데, 이때 조인 조건은 두 테이블간 FOOD_TYPE과 FAVORITES가 같아야 한다.
select R.FOOD_TYPE,R.REST_ID,R.REST_NAME,R.FAVORITES
from REST_INFO R
join (select FOOD_TYPE, max(FAVORITES) as maxFav
from REST_INFO
group by FOOD_TYPE) T
on R.FOOD_TYPE = T.FOOD_TYPE and R.FAVORITES = T.maxFav
order by R.FOOD_TYPE desc
참고자료
https://helloino.tistory.com/120
'DB > SQL' 카테고리의 다른 글
[SQL]프로그래머스 - 자동차 평균 대여 기간 구하기 (0) | 2023.05.31 |
---|---|
[SQL] 행 입력, 수정, 삭제 CRUD (0) | 2023.05.30 |
[SQL] join, on (0) | 2023.05.25 |
[SQL]Group by, Having, 집계함수 (0) | 2023.05.23 |
[SQL] 서브쿼리 - TODO (0) | 2023.05.21 |