그룹함수 ( GROUP BY )
- 조회된 행들의 집합그룹에 적용되어 하나의 결과를 생성하는 함수
집합그룹 : 테이블 전체 또는 그룹화된 테이블의 행들
집합그룹의 예시 : 사원테이블전체 혹은 부서별 평균임금 / 직종별 전체 급여 / 관리자별 관리직원수 / 입사년도별 입사한 사원수 / 급여등급별 사원수 등
그룹함수 사용시 주의사항
- 그룹함수는 WHERE절에서 사용할 수 없다
- 그룹함수와 그룹함수가 아닌 표현식을 SELECT절에 같이 적을 수 없다
- 그룹함수의 중첩은 한번만 허용된다
- GROUP BY절에 등장한 표현식은 그룹함수와 같이 SELECT절에 적을 수 있다
그룹함수의 종류
- COUNT(*) : 조회된 모든 행의 갯수를 반환한다
- COUNT(컬럼 혹은 표현식) : 조회된 행에서 지정된 컬럼의 값이 NULL이 아닌 행의 갯수를 반환한다
- SUM(컬럼 혹은 표현식) : 조회된 행에서 지정된 컬럼의 값의 합계를 반환한다 ( NULL은 무시한다 )
- AVG(컬럼 혹은 표현식) : 조회된 행에서 지정된 컬럼의 값의 평균을 반환한다 ( NULL은 무시한다 )
- MIN(컬럼 혹은 표현식) : 조회된 행에서 지정된 컬럼의 값의 최소값을 반환한다 ( NULL은 무시한다 )
- MAX(컬럼 혹은 표현식) : 조회된 행에서 지정된 컬럼의 값의 최대값을 반환한다 ( NULL은 무시한다 )
- VARIANCE(컬럼 혹은 표현식) : 조회된 행에서 지정된 컬럼의 값의 분산을 반환한다 ( NULL은 무시한다 )
- STDDEV(컬럼 혹은 표현식) : 조회된 행에서 지정된 컬럼의 값의 표준편차를 반환한다 ( NULL은 무시한다 )
테이블의 행을 그룹화하기
- GROUP BY 절을 사용해서 지정된 컬럼의 값이 같은 값을 가지는 행끼리 그룹화할 수 있다
- GROUP BY절은 행 그룹화 기준을 결정하는 값을 가진 컬럼을 지정한다
- GROUP BY절에 지정한 컬럼은 SELECT절에서 그룹함수와 같이 사용할 수 있다
- SELECT 절에서 사용된 그룹함수는 GROUP BY로 그룹화된 각각의 그룹마다 실행된다
GROUP BY절의 작성 규칙
select 컬럼혹은표현식, 그룹함수(), 그룹함수()
from 테이블명
[where 조건식]
[group by 컬럼혹은표현식]
[order by 컬럼명]
그룹함수 실행결과를 필터링하기
- HAVING절은 GROUP BY절을 사용해서 행을 그룹화하고, 각 그룹에 그룹함수를 실행한 결과를 필터링할 때 사용한다
- 일반적으로 행을 필터링할 때는 WHERE절을 사용한다
- WHERE와 HAVING의 차이
- WHERE
- 행을 필터링한다
- 그룹함수를 조건식에 사용할 수 없다
- HAVING
- 그룹화된 그룹에 그룹함수 적용한 후에 계산된 결과로 필터링을 한다
- 그룹함수를 조건식에 사용할 수 있다
- WHERE
HAVING절의 작성규칙
select column, 그룹함수
from table
[where 조건식]
[group by 컬럼혹은표현식]
[having 그룹함수적용결과를 필터링하는 조건식]
[order by 컬럼]
-- 소속부서별로 사원수를 집계했을 때, 사원수가 5명 미만인 부서의 아이디와 사원수를 조회하기
select department_id, count(*)
from employees
group by department_id
having count(*) < 5
GROUP BY 사용예시
아직 GROUP BY에 대한 이해가 깊지 못해서 부서별로 / 그룹별로 하는건 GROUP BY를 사용하는걸로 이해해야겠다
HAVING 사용예시
'SQL' 카테고리의 다른 글
SQL_DDL과 정규화 (1) | 2023.12.18 |
---|---|
SQL_서브쿼리 (1) | 2023.12.17 |
SQL_Join (0) | 2023.12.13 |
SQL_오라클 내장함수(변환함수, 기타함수) (0) | 2023.12.12 |
SQL_오라클 내장함수 (문자함수, 숫자함수, 날짜함수) (1) | 2023.12.11 |