Published 2020. 5. 14. 21:54
728x90
반응형

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
복사했습니다!