그룹 함수의 개념
- 테이블의 전체 행을 하나 이상의 칼럼을 기준으로 그룹화하여 그룹별로 결과를 출력하는 함수
- 그룹 함수는 통계적인 결과를 출력하는데 자주 사용
SELECT column, group_function(column)
FROM table
[WHERE condition]
[GROUP BY group_by_expression]
[HAVING group_condition]
– GROUP BY : 전체행을 group_by_expression을 기준으로 그룹화
– HAVING : GROUP BY 절에 의해 생성된 그룹별 로조건 부여
종류 | 의미 | 사용 예 |
COUNT | 행의 개수 출력 | COUNT ({* | [DISTINCT | ALL] expr}) |
MAX | NULL을 제외한 모든 행에서 최대 값 | |
MIN | NULL을 제외한 모든 행에서 최소 값 | |
SUM | NULL을 제외한 모든 행의 합 | SUM([DISTINCT | ALL] expr) |
AVG | NULL을 제외한 모든 행의 평균 값 | AVG ([DISTINCT | ALL] expr) |
STDDEV | NULL을 제외한 모든 행의 표준편차 | |
VARIANCE | NULL을 제외한 모든 행의 분산 값 | |
GROUPING | 해당 칼럼이 그룹에 사용되었는지 여부를 1 또는 0으로 반환 | |
GROUPING SETS | 한 번의 질의로 여러 개의 그룹화 기능 |
- '*'은 NULL을 포함한 모든 행의 개수
- DISTINCT는 중복되는 값을 제외한 행의 개수
- ALL은 중복되는 값을 포함한 행의 개수, 기본값은 ALL
- expr 인수에서 사용 가능한 데이터 타입은 CHAR, VARCHAR2, NUMBER, DATE타입
데이터 그룹 생성
– 특정 칼럼 값을 기준으로 테이블의 전체 행을 그룹별로 나누기 위한 절
– 예를 들어, 교수 테이블에서 소속 학과별이나 직급별로 평균 급여를 구하는 경우
– GROUP BY 절에 명시되지 않은 칼럼은 그룹 함수와 함께 사용할 수 없음
GROUP BY 절 사용할 때 적용되는 규칙
– 그룹핑 전에 WHERE 절을 사용하여 그룹 대상 집합을 먼저 선택
– GROUP BY 절에는 반드시 칼럼 이름을 포함해야 하며 칼럼 별명은 사용할 수 없음
- 그룹별 출력 순서는 오름차순으로 정렬
- SELECT절에서 나열된 칼럼 이름이나 표현식은 GROUP BY 절에서 반드시 명시
- GROUP BY절에서 명시한 칼럼 이름은 SELECT절에서 명시하지 않아도 된다.
다중 칼럼을 이용한 그룹핑
– 하나이상의 칼럼을 사용하 여그룹을 나누고, 그룹 별로 다시 서브그룹을 나눔
- 전체 교수를 학과 별로 먼저 그룹핑 한 다음, 학과별 교수를 직급 별로 다시 그룹핑하는 경우
ROLLUP 연산자
– GROUP BY 절의 그룹 조건에 따라 전체행을 그룹화하고 각 그룹에 대해 부분합을 구하는 연산자
– GROUP BY 절에 칼럼의 수가 n개이면 ROLLUP 그룹핑 조합은 n+1개
SELECT deptno, grade, COUNT(*), ROUND(AVG(weight))
FROM student
GROUP BY deptno, grade;
SELECT에서 조회 FROM에서 테이블명 입력 GROUPBY에서 deptno와 grade순으로 정렬
CUBE 연산자
– ROLLUP에 의한 그룹 결과와 GROUP BY 절에 기술된 조건에 따라 그룹 조합을 만드는 연산자
– GROUP BY 절에 칼럼의 수가 n개이면 CUBE 그룹핑 조합은 2n개
SELECT column, group_function(column)
FROM table
[WHERE condition]
[GROUP BY [ROLLUP | CUBE] group_by_expression]
[HAVING group_condition]
GROUPING 함수
– 인수로 지정된 칼럼이 ROLLUP이나 CUBE 연산자로 생성된 그룹 조합에서 사용되었는지 여부를 1 또는 0으로 반환
– 사용하면 0, 아니면 1
SELECT column, group_function(column), GROUPING(column)
FROM table
[GROUP BY [ROLLUP | CUBE] group_by_expression]
[GROUPING SET(column, column...), ...]
[HAVING group_condition]
GROUPING SETS : 괄호를 사용하여 복수 개의 그룹 조건 지정
HAVING 절
– GROUP BY 절에 의해 생성된 그룹을 대상으로 조건을 적용
HAVING 절의 실행 과정
–테이블에서 WHERE 절에 의해조건을만족하는 행 집합을 선택
–행 집합을 GROUP BY 절에의해 그룹핑
- HAVING절에 의해 조건을 만족하는 그룹을 선택
SELECT column, group_function(column), GROUPING(column)
FROM table
[GROUP BY [ROLLUP | CUBE] group_by_expression]
[HAVING group_condition]
[ORDER BY column]
HAVING과 WHERE의 차이
–WHERE 절의검색조건을먼저실행하는방법이효율적
•그룹화하는 행 집합을 줄여서 내부 정렬 시간을 단축
•SQL 처리성능향상