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을 배운지 얼마 되지 않아 잘못된 내용이 있을 수 있습니다. 틀린 내용이있다면, 댓글로 달아주세요.
'DATABASE(oracleDB 11g) > SQL' 카테고리의 다른 글
[SQL]서브쿼리(SUBQUERY)의 기초 (0) | 2019.01.30 |
---|---|
[SQL]계층적 질의 (0) | 2019.01.30 |
[SQL]집합연산자의 기초 (0) | 2019.01.30 |
[SQL]INNER JOIN과 OUTER JOIN, SELF JOIN, CROSS JOIN 에 대하여 (0) | 2019.01.30 |
[SQL]조인(JOIN)의 기초-Equi join 과 Non-Equi Join (0) | 2019.01.29 |