[DB] Oracle의 내장함수 - 그룹함수(다중행 함수)와 GROUP BY(그룹화)
# 목적
: 오라클 데이터베이스의 그룹함수(다중행 함수)와 GROUP BY(그룹화)에 대한 간단 정리
그룹함수 란?
- 조회된 행들의 집합그룹에 적용되어 그룹 당 하나의 결과를 생성하는 함수* 집합그룹 : 테이블 전체 또는 그룹화된 테이블의 행들
- 그룹함수 사용 시 주의사항
1) WHERE절에서 사용 불가
2) 그룹함수와 컬럼명(혹은 표현식)을 SELECT절에 같이 적을 수 없음* 단, GROUP BY절에 등장한 컬럼명(혹은 표현식)은 그룹함수와 같이 SELECT절에 적을 수 있음
3) 그룹함수의 중첩은 한번만 허용
그룹함수의 종류
1. COUNT(*)
- 조회된 모든 행의 갯수 반환
2. COUNT(컬럼명)
- 조회된 행에서 지정된 컬럼의 값이 NULL이 아닌 행의 갯수 반환
3. SUM(컬럼명)
- 조회된 행에서 지정된 컬럼 값의 합계 반환(NULL은 무시)
4. AVG(컬럼명)
- 조회된 행에서 지정된 컬럼 값의 평균 반환(NULL은 무시)
5. MIN(컬럼명)
- 조회된 행에서 지정된 컬럼 값의 최소값 반환(NULL은 무시)
6. MAX(컬럼명)
- 조회된 행에서 지정된 컬럼 값의 최대값 반환(NULL은 무시)
그룹화(GROUP BY)
- GROUP BY절을 이용해 테이블의 행을 지정된 컬럼의 값이 같은 값을 가지는 행끼리 그룹화함
- 형식)
SELECT 컬럼명1, 컬럼명2, 그룹함수(), 그룹함수()
FROM 테이블명
[WHERE 조건식]
[GROUP BY 컬럼명, 컬럼명, ...]
[ORDER BY 컬럼명]
- ex)
-- 부서별 사원수 조회하기
SELECT D.DEPARTMENT_NAME, COUNT(*)
FROM EMPLOYEES E, DEPARTMENTS D
WHERE E.DEPARTMENT_ID = D.DEPARTMENT_ID
GROUP BY D.DEPARTMENT_NAME;
그룹함수 실행결과 필터링하기(HAVING)
- GROUP BY절을 이용해 행을 그룹화하고, 각 그룹에 그룹함수를 실행한 결과를 필터링할 때 사용* 반드시 GROUP BY절과 함께 사용
- WHERE절의 조건식에는 그룹함수를 사용할 수 없지만, HAVING절의 조건식에는 그룹함수 사용 가능
- 형식)
SELECT 컬럼명1, 컬럼명2, 그룹함수(), 그룹함수()
FROM 테이블명
[WHERE 조건식]
[GROUP BY 컬럼명, 컬럼명, ...]
[HAVING 그룹함수적용결과를 필터링하는 조건식]
[ORDER BY 컬럼명]
- ex)
-- 2005년 이전에 입사한 직원들의 수를 부서별로 조회했을 때, 직원수가 5명 이상인 부서아이디와 직원수 조회하기
SELECT DEPARTMENT_ID, COUNT(*)
FROM EMPLOYEES
WHERE HIRE_DATE < '2005/01/01'
GROUP BY DEPARTMENT_ID
HAVING COUNT(*) >= 5;
< 해당 글은 velog에서 이전하며 옮겨온 글로, 가독성이 좋지 않을 수 있는 점 양해 부탁드립니다. >
🔗 velog 버전 보기 : https://velog.io/@ryuneng2/DB-Oracle-내장함수-그룹함수-다중행함수-GroupBy