- 여러 행들의 그룹이 모여서 그룹당 단 하나의 결과를 돌려주는 함수이다.
- GROUP BY절은 행들을 소그룹화 한다.
- SELECT 절,HAVING 절,ORDER BY 절에 사용할 수 있다.
- 해당칼럼에 값이 NULL인 것을 제외하고 계산한다.
- COUNT(*)은 NULL값을 포함한 행의 수를 계산한다.
EX)
TEST 테이블
A | B | C | D |
---|---|---|---|
NULL | NULL | 50 | 30 |
30 | 20 | 10 | 30 |
NULL | 10 | NULL | NULL |
SELECT COUNT(A)
FROM TEST; -> 1
SELECT COUNT(*)
FROM TEST;
// 각 행 별로 묶어서 계산하면 된다.
// SUM(B + C) 에서 첫 계산은 NULL + 50 = NULL...
SELECT SUM(A) + SUM(B + C) + SUM(D)
FROM TEST; -> 120
SELECT SUM(A) + SUM(B) + SUM(C) + SUM(D)
FROM TEST; -> 180
GROUP BY 절은 SQL 문에서 FROM 절과 WHERE 절 뒤에 오며, 데이터들을 작은 그룹으로 분류하여 소그룹에 대한 항목별로 통계 정보를 얻을 때 추가로 사용된다.
- GROUP BY 절을 통해 소그룹별 기준을 정한 후, SELECT 절에 집계함수를 사용한다.
- ORDER BY 절은 SELECT절에 정의되지 않은 컬럼 사용가능
- 집계 함수의 통계 정보는 NULL 값을 가진 행을 제외하고 수행한다.
- GROUP BY 절에서는 SELECT절과는 달리 ALIAS명을 사용할 수 없다.
- 집계 함수는 WHERE 절에는 올 수 없다.
- HAVING 절에는 집계함수를 이용하여 조건을 표시할 수 있다.
- GROUP BY절은 조건을 WHERE절이 아닌 HAVING절에 기술한다.
- HAVING절은 일반적으로 GROUP BY 절 뒤에 위치한다.
SELECT 칼럼명, 그룹함수
FROM 테이블명
WHERE 조건 (연산자)
GROUP BY 칼럼명
[HAVING] 조건 (연산자 그룹함수 사용가능);
-------------------------------------------
// 부서의 급여 최대값과 최소값을 구하되 최대 급여가 2900 이상인 부서만 출력
SELECT DEPTNO, MAX(SAL), MIN(SAL)
FROM EMP
GROUP BY DEPTNO
HAVING MAX(SAL) > 2900;