DATABASE(oracleDB 11g)/SQL

[SQL]GROUP BY의 확장

SEUNGSAMI 2019. 1. 30. 14:22

GROUP BY의 확장



기본적인 group by는 아래 예시와 같다.

1
2
3
4
select department_id 부서, trunc(avg(salary), 2) 평균연봉, job_id 업무
from employees
group by department_id , job_id
order by department_id asc;
cs

위의 내용은 department_id로 그룹화하고 그룹화된 테이블을 다시 job_id로 그룹화 하는 것을 말한다.


아래 groupby rollup()의 예시를 보자

1
2
3
4
select department_id 부서, trunc(avg(salary), 2) 평균연봉, job_id 업무
from employees
group by rollup(department_id , job_id)
order by department_id asc;
cs

여기서 추가된 rollup()은 그룹화 할 조건이 있다면 우측부터 하나씩 제외해 가면서 결과를 반환하는 함수이다.

즉 (a, b, c)가 있으면 (a, b) -> (a) -> ( ) 로 하나씩 제외해가며 결과를 반환하는 것을 말하는 것이다.




group by cube()는 ( a컬럼, b컬럼 )의 경우 a, b 별 집계 -> a 별 집계 -> b 별 집계 ->전체 집계

즉 (a, b, c)가 있으면 (a, b) -> (a, c) -> (b, c) -> (a) -> (b) - (c) -> ( ) 로 결과를 반환하는 것을 말한다.

다음의 예시를 보자

1
2
3
4
select department_id, trunc(avg(salary), 2), job_id
from employees
group by cube(department_id , job_id)
order by department_id asc;
cs



group by grouping sets()

위의 group by cube()에서 내가 원하는 집계 유형을 선택해서 반환할 수 있다.

다음 예시를 보자

1
2
3
4
select department_id 부서, trunc(avg(salary), 2) 평균연봉, job_id 업무
from employees
group by grouping sets((department_id , job_id), (department_id), ())
order by department_id asc;
cs


SQL을 배운지 얼마 되지 않아 잘못된 내용이 있을 수 있습니다. 틀린 내용이있다면, 댓글로 달아주세요.