오류, 기능, 문제해결(SQL)

Invalid use of group function 해결 / WHERE, HAVING 차이?

seungmin576 2024. 12. 3. 14:52

혼자 숙제 하던 도중

SELECT
	*
FROM checkins
WHERE MIN(DATE_FORMAT(DATE(created_at), '%Y%m%d'))

날짜가 제일 작은 컬럼을 도출하고 싶어 이렇게 썼더니 위 오류가 나더라

그래서 찾아보니 WHERE 절은 개별 컬럼에만 사용해야하고

MIN 함수를 사용해서(집계함수를 쓰면) HAVING절을 사용해야 한다.

 

SELECT
	*
FROM checkins
HAVING MIN(DATE_FORMAT(DATE(created_at), '%Y%m%d'))

이렇게 쓰니 바로 해결

 

WHERE, HAVING 차이

HAVING절은 그룹을 필터링하는데 사용한다.

WHERE절은 행을 필터링 하는데 사용한다.

 

HAVING절은 GROUP BY절 뒤에 사용한다.

WHERE 절은 GROUP BY절 앞에 사용한다.

 

HAVING절은 집계함수(MIN, MAX, COUNT, SUM, AVG)와 사용할 수 있다.

WHERE절은 HAVE절에 포함된 하위쿼리에 있지않으면 사용 불가능!   <- 내가 오류낸 이유!!

 

WHERE 절은 데이터가 집계되기 전에 조건을 적용할 때 사용되며, 

HAVING 절은 집계된 결과에 대한 조건을 적용할 때 사용합니다.

이게 제일 와닿는다.

 

참고 블로그

https://velog.io/@ljs7463/SQL-having-%EA%B3%BC-where-%EC%B0%A8%EC%9D%B4