티스토리 뷰

Sql

그룹함수 - Grouping sets

pakker 2021. 3. 29. 16:13

grouping sets를 통해 더욱 다양한 소계 집합을 만들 수 있다. 문장을 여러번 반복하지 않아도 원하는 결과를 쉽게 얻을 수 있게 되었다.

그룹함수 종류가 여러가지라 상황에 따라 잘 사용 할 것. 다음 포스팅을 참고

2021.03.29 - [Sql] - 그룹 함수-rollup, rollup orderby, grouping

 

그룹 함수-rollup, rollup orderby, grouping

GROUP BY로 그룹핑한 로우들의 갯수나, 합계 등을 구해주는 기능이있다. oracle에서는 ROLLUP인데 mysql에서는WITH ROLLUP을 사용한다. 1. oracle select count(*) 'total empl', sum(SAL) 'total sal' from EMP,..

pakker.tistory.com

2021.03.29 - [Sql] - 그룹함수 - cube

 

그룹함수 - cube

rollup은 총 갯수, 총 합계 등만 가능했지만, cube는 결합 가능한 모든 값에 대하여 다차원 집계를 생성한다. 간단한 합계는 rollup을 사용하며, 다차원, 복합 합계는 cube를 사용한다. cube는 다차원, 복

pakker.tistory.com

* 결론적으로 예시를 통한 간단한 차이는?

rollup : 부서의 Job별 총계, 부서와 job을 포함한 전체 총계를 구할 수 있음

cube : 부서별 총계를 구할 수 있음

grouping sets : 전체 부서별 총계, 전체 Job 별 총계를 구할 수 있음

 

일반 그룹 함수를 통해서 전체 부서별 총계, 전체 Job 별 총계를 구한다면??

이렇게 union all을 사용하여 테이블 조회를 2번 해야함

하지만 grouping sets를 사용 한다면?

select decode(grouping(DNAME), 1, 'all departments', DNAME) as DNAME
		decode(grouping(JOB), 1, 'all jobs', JOB) as JOB
        count(*) 'total empl', sum(SAL) 'total sal'
from EMP, DEPT
where DEPT.DEPTNO = EMP.DEPTNO
group by GROUPING SETS(DNAME, JOB)

이렇게 간단하게 작성이 가능하다.

grouping sets 함수 사용시 union all 을 사용한 일반 그룹함수를 사용한 sql과 같은 결과를 얻을 수 있으며, 괄호로 묶은 집합 별로(괄호 내는 계층 구조가 아닌 하나의 데이터로 간주) 집계를 구할 수 있다.

grouping sets의 경우 일반 그룹함수를 이용한 sql과 결과 데이터는 같으나 행들의 정렬 순서는 다를 수 있다.

그리고 하단의 쿼리처럼 순서가 바껴도 결과는 동일하다.

select decode(grouping(DNAME), 1, 'all departments', DNAME) as DNAME
		decode(grouping(JOB), 1, 'all jobs', JOB) as JOB
        count(*) 'total empl', sum(SAL) 'total sal'
from EMP, DEPT
where DEPT.DEPTNO = EMP.DEPTNO
group by GROUPING SETS(JOB, DNAME) --> 순서바뀜

-----------------------------------------------------------------------------------------------------------------

인수가 3가지로 늘어난다면?

Q. 부서-job-매니저 별 집계와, 부서-job 집계, job-매니저집계를 grouping set 함수를 이용해서 구하는법?

A. 알고 싶은 것 대로 인수를 괄호로 묶기만 하면 된다.

group by grouping sets ((DNAME, JOB, MGR), (DNAME, JOB), (JOB, MGR));

 

'Sql' 카테고리의 다른 글

인덱스 스캔 방식 및 인덱스 쿼리튜닝  (0) 2021.03.31
윈도우함수 ≒ 분석함수 ≒ 순위함수  (0) 2021.03.29
그룹함수 - cube  (0) 2021.03.29
그룹 함수-rollup, rollup orderby, grouping  (0) 2021.03.29
서브쿼리  (0) 2021.03.28
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함