본문 바로가기
My Image
전공지식/DataBase

[SQLD] 제2장 - 그룹함수(CUBE, ROLLUP, GROUPING SETS)_2

by Lim-Ky 2018. 5. 18.
반응형




CUBE 함수


지난 시간 : 2018/05/17 - [전공지식/DataBase] - [SQLD] 제2장 - 그룹함수(CUBE, ROLLUP, GROUPING SETS)_1



ROLLUP 에서는 단지 가능한 Subtotal 만을 생성하였지만, CUBE는 결합 가능한 모든 값에 대하여 다차원 집계를 생성합니다.

CUBE를 사용할 경우에는 내부적으로는 Grouping Columns의 순서를 바꾸어서 또 한 번의 쿼리를 추가 수행해야 합니다. 뿐만 아니라 Grand Total 은 양쪽의 쿼리에서 모두 생성이 되므로 한 번의 쿼리에서는 제거되어야만 하므로 ROLLUP에 비해 시스템의 연산 대상이 많습니다.


이처럼 모든 경우에 대해서 Subtotal을 생성해야 하는 경우에는 CUBE를 사용하는 것이 바람직합니다. 또한, ROLLUP에 비해 시스템에 많은 부담을 주므로 사용에 주의해야 합니다. 

또한 ROLLUP과 달리 인수의 순서가 달라져도 데이터 결과는 같습니다. 그리고 CUBE 결과에 대해 정렬이 필요한 경우네느 ORDER BY 절에 명시적으로 정렬 컬럼을 표시해야 합니다.


[예제1] CUBE 함수를 추가한 집계 보고서에서 집계 레코드를 구분할 수 있는 GROUPING 함수가 추가된 SQL 문장을 작성하시오.

>> 부서명, 직무별 전체직원수와 전체 연봉을 구하시오.


-> CUBE는 모든 경우의 Subtotal 집계를 하며, GROUPING COLUMNS 의 수가 N개라고 하면, 2의 N승 LEVEL의 Subtotal을 생성하게 됩니다.







만약 CUBE함수 없이 모든 경우의 Subtotal 집계를 하기 위해선 어떻게 해야할까요???

UNION ALL을 4번이나 액세스해야 하기 때문에 비효율적이고 쿼리가 길어 유지보수의 어려움을 가져옵니다. 자 아래의 예를 살펴보겠습니다.


-> UNION ALL  을 4번이나 해야함. (SQL쿼리가 길어짐 -> 가독성이 안좋음, 유지보수의 어려움을 야기시킴)





이번시간은 CUBE함수에 대해서 알아봤습니다. 


요약하자면, CUBE함수는 모든 경우의 집계를 할 수 있다는 점! 또한, SQL 수행속도와 SQL 쿼리 가독성을 높이는 효과를 가져온다는 점!


잊지 않았으면 좋겠습니다. 다음 시간은 GROUPING SETS 함수에 대해 알아보겠습니다.










반응형

댓글