order by절
select한 컬럼에 대해 정렬을 할 때 작성하는 구문
select 구문의 가장 마지막에 작성하며, 실행순서도 가장 마지막에 수행됨
group by절
세부그룹을 지정함
그룹함수는 단 한 개의 결과값만 산출하기 때문에, 그룹함수를 이용하여 여러 개의 결과값을 산출하기 위해서는 그룹함수가 적용될 그룹의 기준을 group by절에 기술하여 사용해야 함
예제1)성별 인원수 체크
select decode(substr(emp_no, 8,1), '1', '남', '3', '남', '여') 성별,
count(*)
from employee
group by decode(substr(emp_no, 8,1), '1', '남', '3', '남', '여');
예제2)부서내 직급별 인원수 구하기
2개 이상의 컬럼을 기준으로 그룹핑하기
group by에 나열된 순서는 결과에 영향을 주지 않음
select dept_code, job_code, count(*)
from employee
group by dept_code, job_code
order by 1, 2;
select distinct dept_code, job_code
from employee
order by dept_code, job_code;
예제3)부서별 성별 인원수
select dept_code 부서,
decode(substr(emp_no, 8,1), '1', '남', '3', '남', '여') 성별,
trunc(avg(salary)),
count(*) 인원수
from employee
group by dept_code, decode(substr(emp_no, 8,1), '1', '남', '3', '남', '여')
order by 1,2;
having절
그룹함수로 값을 구해올 그룹에 대해 조건을 설정할 때는 having절에 기술(where절은 select에 대한 조건)
having절 안에서 그룹함수 사용이 가능함
예제)부서별 인원이 4명 이상인 부서 조회
select dept_code 부서, count(*) 인원수
from employee
group by dept_code
having count(*) >= 4;
rollup과 cube
순서가 중요함
그룹별 산출한 결과에 대한 집계를 제공하는 함수
기준컬럼이 하나인 경우, rollup과 cube의 결과 같음
rollup
인자로 전달받은 그룹 중에 가장 먼저 지정한 그룹별 합계와 총 합계를 구함
지정한 컬럼에 대해 단방향 소계를 제공
예제)부서별 직급별 인원수(소계와 총계) →rollup으로는 처음으로 지정한 그룹의 소계와 총계만 구할 수 있음
select dept_code,
job_code,
count(*)
from employee
group by rollup(dept_code, job_code) --dept_code로 group by 한 결과가 나옴(job_code로 group by 한 결과는 X)
order by dept_code, job_code;
cube
그룹으로 지정된 모든 그룹에 대한 합계와 총 합계를 구함
지정한 컬럼에 대해 양방향 소계를 제공
예제)부서별 직급별 인원수(소계와 총계)
select dept_code,
job_code,
count(*)
from employee
group by cube(dept_code, job_code)
order by dept_code, job_code;
grouping
rollup이나 cube에 의한 집계 산출물이 인자로 전달받은 컬럼 집합의 산출물이면 0을 반환하고, 아니면 1을 반환하는 함수
예제)부서별 급여 합계(총급여의 합계도 출력)
select decode(grouping(dept_code), 0, nvl(dept_code, '인턴'), '-') 부서,
sum(salary)
from employee
group by cube(dept_code)
order by 1;
'프로그래밍 > SQL' 카테고리의 다른 글
05.18(join) (0) | 2020.05.18 |
---|---|
05.15(union, union all, intersect, minus) (0) | 2020.05.15 |
05.13(Oracle 내장 함수) (0) | 2020.05.13 |
05.12(SQL기본 구문 select, where, order by) (0) | 2020.05.12 |
05.11(SQL) (0) | 2020.05.11 |