그룹함수
그룹함수는 테이블의 전체 행을 하나 이상의 컬럼을 기준으로 컬럼 값에 따라서 그룹화 후 결과를 출력하는 함수입니다.
그룹함수는 ROLLUP, CUBE, GROUPING SETS총 세가지 방식으로 나눠집니다.
ROLLUP함수
ROLLUP함수는 중간 집계 값을 산출하기 위해서 사용되는 그룹함수입니다.
최종 결과 값으로는 지정했던 컬럼의 수보다 하나 큰 레벨의 중간 집계가 나오게 됩니다.
ROLLUP은 지정된 컬럼에 대해서 계층별로 구성되기 때문에 순서에 영향을 받습니다. 즉, 순서가 변경되면 ROLLUP의 결과도 달라지게 됩니다.
SELECT 컬럼, 그룹함수
FROM 테이블명
[WHERE 조건]
GROUP BY 컬럼 ROLLUP 컬럼
[HAVING 조건]
[ORDER BY 컬럼];
ROLLUP은 다음과 같은 형식으로 사용하면 됩니다.
예제를 통해 ROLLUP을 알아봅시다.
다음은 회사 테이블로 부서별로 연봉이 나와있습니다.
부서 | 직위 | 연봉 |
IT | 부장 | 4000 |
IT | 부장 | 4000 |
IT | 차장 | 3000 |
IT | 과장 | 2500 |
기획 | 부장 | 3800 |
기획 | 차장 | 2800 |
이 테이블을 ROLLUP을 이용해 확인해봅시다.
SELECT 부서, 직위, SUM(연봉)
FROM 회사
GROUP BY ROLLUP(부서, 직위);
다음 쿼리를 실행하게 되면 부서와 직위가 같은 사람의 연봉의 합에 대한 집계와 부서에 대한 연봉합, 전체 연봉에 대한 합이 나오게 됩니다.
→ 다음 쿼리를 실행하게 되면 부서와 직위가 같은 사람의 연봉의 합에 대한 집계와 부서에 대한 연봉합, 전체 연봉에 대한 합이 나오게 됩니다.
IT부서의 부장 직위를 가진 사람이 2명인데 둘다 각각 연봉이 4000이므로 두번째 행의 연봉의 합이 8000이 됩니다. 부서별 직위에 대한 집계가 끝나면 부서의 모든 연봉의 합을 구하고, 그마저도 끝나면 총합을 구합니다.
부서 | 직위 | SUM(연봉) |
IT | 부장 | 8000 |
IT | 차장 | 3000 |
IT | 과장 | 2500 |
IT | 13500 | |
기획 | 부장 | 3800 |
기획 | 차장 | 2800 |
기획 | 6600 | |
20100 |
CUBE함수
CUBE함수는 결합이 가능한 모든 값에 대한 다차원 집계를 생성하는 그룹함수입니다.
모든 결과를 보는데에는 용이하지만 연산이 많아 시스템에 부담을 줍니다.
SELECT 컬럼, 그룹함수
FROM 테이블명
[WHERE 조건]
GROUP BY 컬럼 CUBE 컬럼
[HAVING 조건]
[ORDER BY 컬럼];
예제를 통해 CUBE함수에 대해서 알아봅시다.
아까 이용했던 회사 테이블로 CUBE연산을 진행해 봅시다.
부서 | 직위 | 연봉 |
IT | 부장 | 4000 |
IT | 부장 | 4000 |
IT | 차장 | 3000 |
IT | 과장 | 2500 |
기획 | 부장 | 3800 |
기획 | 차장 | 2800 |
SELECT 부서, 직위, SUM(연봉)
FROM 회사
GROUP BY CUBE(부서, 직위);
→ 다음 쿼리를 실행하게 되면 CUBE의 컬럼인 부서와 직위로 나눌 수 있는 모든 경우의 수에 대해서 연봉의 합 결과를 얻을수 있습니다.
부서 | 직위 | SUM(연봉) |
20100 | ||
부장 | 11800 | |
차장 | 5800 | |
과장 | 2500 | |
IT | 부장 | 8000 |
IT | 차장 | 3000 |
IT | 과장 | 2500 |
IT | 13500 | |
기획 | 부장 | 3800 |
기획 | 차장 | 2800 |
기획 | 6600 |
GROUPING SETS함수
GROUPING SETS함수는 집계 대상에 대해서만 결과를 얻을 수 있는 그룹함수입니다.
순서가 결과에 영향을 주는 ROLLUP과 CUBE와는 달리 순서가 상관없습니다.
SELECT 컬럼, 그룹함수
FROM 테이블명
[WHERE 조건]
GROUP BY 컬럼 GROUPING SETS 컬럼
[HAVING 조건]
[ORDER BY 컬럼];
회사 테이블로 GROUPING SETS연산을 진행해 봅시다.
부서 | 직위 | 연봉 |
IT | 부장 | 4000 |
IT | 부장 | 4000 |
IT | 차장 | 3000 |
IT | 과장 | 2500 |
기획 | 부장 | 3800 |
기획 | 차장 | 2800 |
SELECT 부서, 직위, SUM(연봉)
FROM 회사
GROUP BY GROUPING SETS(부서, 직위)
→ 다음 쿼리의 실행 결과로 각 부서별 연봉의 합과 직위별 연봉의 합을 결과로 얻을수 있습니다.
부서 | 직위 | SUM(연봉) |
20100 | ||
부장 | 11800 | |
차장 | 5800 | |
과장 | 2500 | |
IT | 13500 | |
기획 | 6600 |
'공부' 카테고리의 다른 글
코드업 파이썬(Python) 기초 100제 - 6001번 ~ 6005번 (0) | 2021.06.14 |
---|---|
정보처리기사 PART 8 정리 - 윈도함수 (0) | 2021.05.24 |
정보처리기사 PART 8 정리 - 집계함수 (0) | 2021.05.23 |
정보처리기사 PART 8 정리 - 트리거 (0) | 2021.05.06 |
정보처리기사 PART 8 정리 - 사용자 정의함수 (0) | 2021.05.06 |