[SQLD] 그룹 함수 Group Functions

: ) YOUNG·2022년 3월 6일
3

SQLD

목록 보기
4/4
post-thumbnail

그룹 함수

그룹 함수의 개념

  • 테이블 전체 행을 하나 이상의 컬럼을 기준으로 컬럼 값에 따라 그룹화하여 그룹별로 결과를 출력하는 함수

  • 소계 및 총계 등을 구하기 위해서 그룹 함수를 사용한다면, 단일 DML만으로도 원하는 작업을 할 수 있다.


ROLLUP

지정된 컬럼의 소계 및 총계를 구하기 위해 사용

지정 컬럼의 수보다 하나 더 큰 레벨만큼의 중간집계 값이 생성된다.

지정 컬럼은 계층별로 구성되어 순서가 바뀌면 수행 결과가 바뀌기 때문에 유의해서 사용해야 한다.

컬럼 순서에 따라 결과가 다르다

집합의 소계, 총계 계산


CUBE

가능한 모든 결합 계산

내부적으로 대상 컬럼의 순서를 변경하여 또 한번의 쿼리를 수행

다른 그룹 함수보다 시스템에 대한 부하가 크다

인자로 주어진 컬럼의 결합 가능한 모든 조합에 대해서 집계를 수행

다차원 집계


GROUPIG

합계가 계산되면 1

합계가 아니면 0

다른 집계 함수가 없어도 사용이 가능

실무적으로 CASE문과 함께 자주 쓰임

SELECT문과 HAVING문에서 사용 가능


GROUPING SETS

GROUP BY 절과 함께 사용

컬럼 순서와 관계 없음

컬럼 순서가 달라도 결과가 같음

내부적으로 대상 컬럼의 순서를 변경하여 또 한번의 쿼리를 수행

집계 대상 컬럼에 대한 소계를 구할 수 있는 그룹 함수

ROLLUP과 달리 컬럼간 순서와 무관한 결과를 얻을 수 있다.

다양한 소계 집합을 만들 수 있다.


동작 테스트

아래의 테이블을 이용해서 테스트 진행


1. ROLLUP 테스트

SELECT JOB, DEPTNO, SUM(SAL)
FROM EMP
GROUP BY ROLLUP(JOB, DEPTNO);

JOB별 소계와 총계가 나오고
가장 아래에 총 합계가 나오는 모습을 볼 수 있다.



2. CUBE 테스트

SELECT JOB, DEPTNO, SUM(SAL)
FROM EMP
GROUP BY CUBE(JOB, DEPTNO);

ROLLUP과 반대로 가장 위에 줄에 나오는 것이 총 합계 이다
밑에 줄 부터는 DEPTNO인 10, 20, 30별로 각 SAL 총계를 보여주고 있다.
마지막으로 JOB별로 총합을 나타내고 있다.



3. GROUPING SETS 테스트


SELECT JOB, DEPTNO, SUM(SAL)
FROM EMP
GROUP BY GROUPING SETS( (DEPTNO), (JOB), (JOB, DEPTNO), () );

CUBE와 똑같은 결과를 내기 위해서 조금 더 상세한 구문이 필요한것을 확인할 수 있다.



4. GROUPING 테스트

SELECT JOB, DEPTNO, SUM(SAL), GROUPING(JOB), GROUPING(DEPTNO)
FROM EMP
GROUP BY ROLLUP(JOB, DEPTNO);

ROLLUP의 결과와 굉장히 비슷하지만
우측의 0 과 1로 된 합계가 계산되면 1을 나타내고
아닐 경우 0을 반환하는 컬럼의 여부가 다르다

0개의 댓글