그룹 함수의 개념

- 테이블의 전체 행을 하나 이상의 칼럼을 기준으로 그룹화하여 그룹별로 결과를 출력하는 함수

- 그룹 함수는 통계적인 결과를 출력하는데 자주 사용

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 처리성능향상

+ Recent posts