본문 바로가기

DB/SQLD

[SQLD] SQL 활용 - Group Function

1️⃣ Group Function

1) ROLLUP

 ∙ ROLLUP은 GROUP BY의 칼럼에 대해서 Subtotal을 만들어 준다. 

 ∙ ROLLUP을 할 때 GROUP BY구에 칼럼이 2개 이상 오면 순서에 따라서 결과가 달라진다.

ROLLUP을 사용하면 부서별 합계 및 전체합계가 계산된다.

∙ 위의 예는 DEPARMENT_ID에 대해서 GROUP BY로 급여합계를 계산하고 부서별 전체합계를 추가해서 계산했다.

   즉, ROLLUP은 DEPARTMENT_ID에 대해서 기존 GROUP BY와는 다르게 부서별 전체합계를 게산하게 된다.

∙ DECODE문은 전체 합계를 조회할 때 '전체합계'라는 문자를 출력하기 위해서 사용된다.

   DECODE문을 사용해서 DEPARTMENT_ID가 NULL 과 같으면 '전체합계'라는 문자를 출력하고 그렇지 않으면 부서번호(DEPARTMENT_ID)를 출력한다.

 

∙ JOB_ID 컬럼이 NULL값인 경우는 부서별 합계이다.

∙ 부서별, 직업별 ROLLUP을 실행하면 부서별 합계, 직업별 합계, 전체합계가 모두 조회된다.

∙ ROLLUP으로 실행되는 칼럼별로 Subtotal을 만들어 준다.

 

2️⃣ GROUPING 함수

∙ GROUPING 함수는 ROLLUP, CUBE, GROUPING SETS에서 생성되는 합계 값을 구분하기 위해서 만들어진 함수이다.

∙ 예를 들어 소계, 합계 등이 계산되면 GROUPING 함수는 1을 반환하고 그렇지 않으면 0을 반환해서 합계 값을 식별할 수 있다.

 

ROLLUP, CUBE, GROUPING SETS으로 계산된 합계는 '1'을 표시한다.

∙ 위 SQL문은 소계와 합계가 계산된 데이터는 GROUPING 함수에서 '1'이 출력된다.

∙ GROUPING의 반환 값을 DECODE 혹은 CASE문으로 식별해서 SELECT문으로 '소계, '합계'를 구분하는 것이다.

 

∙ DECODE 함수를 사용해서 GROUPING 함수 결과가 '1'이면 '전체합계' 혹은 '부서합계'를 출력하고 그렇지 않으면 NULL을 리턴한다.

∙ GROUPING 함수의 기능을 사용하면 사용자가 필요로 하는 데이터를 SELECT문으로 작성하여 제공할 수 있다.

 

3️⃣ GROUPING SETS 함수

∙ GROUPING SETS 함수는 GROUP BY에 나오는 칼럼의 순서와 관계없이 다양한 소계를 만들 수 있다.

∙ GROUPING SETS 함수는 GROUP BY에 나오는 칼럼의 순서와 관계없이 개별적으로 모두 처리한다.

∙ GROUPING SETS 함수로 DEPARMENT_ID와 JOB을 실행했다.

∙ 그 결과 DEPARTMENT_ID 합계와 JOB_ID 합계가 개별적으로 조회되었다. 즉, 서로 관계가 없다는 것이다.

 

4️⃣ CUBE 함수

∙ CUBE는 CUBE 함수에 제시한 칼럼에 대해서 결합 가능한 모든 집계를 계산한다.

∙ 다차원 집계를 제공하여 다양하게 데이터를 분석할 수 있게 한다.

∙ 예를 들어 부서와 직업을 CUBE로 사용하면 부서별 합계, 직업별 합계, 부서별 직업별 합계, 전체 합계가 조회된다.

∙ 조합할 수 있는 경우의 수가 모두 조합된다.

 

전체 합계 : DEPARTMENT_ID와 JOB_ID가 null인 row 

직업별 합계 : DEPARTMENT_ID가 null인 row

부서별 합계 : JOB_ID가 null인 row 

 

 

'DB > SQLD' 카테고리의 다른 글

[SQLD] SQL 활용 - Table Partition  (0) 2020.03.21
[SQLD] SQL 활용 - Window Function  (0) 2020.03.12
[SQLD] SQL 활용 - Subquery  (0) 2020.03.11
[SQLD] SQL 활용 - Connect by(계층형 조회)  (0) 2020.03.11
[SQLD] SQL 활용 - Join  (0) 2020.03.11