[DATABASE] 그룹함수I [ROLLUP/CUBE/GROUPING SETS/LISTAGG]

@욕심쟁이

·

2020. 11. 18. 09:43

반응형

그룹합수란?

- 그룹 함수는 검색된 여러 행을 이용하여 통계정보를 계산하는 함수이다.

- 기존 그룹함수 GROUP BY절 과 HAVING절 (참고 sseozzzy.tistory.com/71)

SELECT department_id, job_id, COUNT(*), SUM(salary)
FROM employees
WHERE department_id > 50
GROUP BY department_id, job_id;

ROLLUP

- 그룹 묶는 기준 컬럼이 여러 개인 경우 생성되는 그룹의 상위 레벨의 그룹을 생성하여 결과를 출력.

SELECT department_id, job_id, COUNT(*), SUM(salary)
FROM employees
WHERE department_id > 50
GROUP BY ROLLUP(department_id, job_id);

CUBE

- GROUP BY에 사용된 그룹 묶는 기준 컬럼들의 모든 조합으로 그룹을 만들어 결과를 생성해주는 함수

SELECT department_id, job_id, COUNT(*), SUM(salary)
FROM employees
WHERE department_id > 50
GROUP BY CUBE(department_id, job_id);

GROUPING SETS

- 다양한 기준으로 그룹을 묶고 싶은 경우 GROUPING SETS를 사용하면 한번에 구현이 가능.
GROUPING SETS에 사용된 컬럼들은 개별 컬럼별로 그룹을 묶어서 결과를 출력해준다.

SELECT department_id, manager_id, COUNT(*)
FROM employees
WHERE department_id > 90
GROUP BY GROUPING SETS(department_id, manager_id);

LISTAGG

- 그룹에 속한 행들의 리스트 값을 하나의 컬럼에 합쳐서 출력해주는 함수.

SELECT department_id, LISTAGG(last_name, ', ') WITHIN GROUP(ORDER BY hire_date) "last_name"
FROM employees
WHERE department_id > 80
GROUP BY department_id;
반응형