혼자 숙제 하던 도중
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
'오류, 기능, 문제해결(SQL)' 카테고리의 다른 글
| ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) MacOs 기준 (0) | 2025.04.24 |
|---|---|
| INNER JOIN, LEFT JOIN 차이점 (1) | 2024.12.04 |
| TIMESTAMPDIFF가 알아서 윤년을 포함할까? (1) | 2024.12.04 |
| SQL 명령어 사용법 기억날 때 마다 와서 써놓기 (0) | 2024.11.27 |