Oracle

[SQL] WHERE절에 집계함수? GROUP BY 없이 HAVING절?

LKJaden 2025. 1. 15. 10:45

결론부터 말하자면, WHERE 절에 집계함수는 사용 불가능하고, GROUP BY절이 없어도 HAVING절은 사용 가능하다.

 

 

총 학생 수가 240보다 작은 경우에만 총 학생 수를 조회하는 쿼리를 짜려고 한다. ( 학생 수 총계: 238 )

테이블명: 학생
학생수
1 30
2 30
3 28
4 35
5 30
6 30
7 30
8 25

 

보통 쿼리의 조건을 WHERE절로 걸기 때문에 아래와 같이 WHERE절을 이용해 짜는 실수를 범할 수 있다.

SELECT SUM(학생수)
FROM 학생
WHERE SUM(학생수) < 240;

 

그러나 WHERE절에서는 집계함수를 사용할 수 없다.

 

이 때, HAVING 절을 이용하면 된다.

많은 사람들이 GROUP BY와 함께 사용하고 있는 HAVING절은, 사실 GROUP BY절이 없어도 단독으로 사용 가능하다.

따라서 집계함수를 사용할 수 있는 HAVING으로 바꾸어주면 아래의 쿼리와 같다.

SELECT SUM(학생수)
FROM 학생
HAVING SUM(학생수) < 240;