GROUP BY 절 : 그룹으로 분류하여 그룹에 대한 항목별로 통계 정보를 얻는다.
HAVING 절 : GROUP BY 결과를 기반으로 출력에서 그룹을 제거한다.
GROUP BY 절 사용 예
-- SAL 급여 컬럼, DEPT 부서 컬럼, POS 직급 컬럼
select sum(sal) from 테이블명;
-- 급여 합계
select sum(sal) from 테이블명 group by dept;
-- 부서별 sal 합계
select dept, sum(sal) from 테이블명 group by dept;
-- group by에 오는 컬럼은 select에 사용할 수 있음, 부서별 급여 합계
select pos, dept, sum(sal) from 테이블명 group by dept,pos order by dept;
-- 부서 그리고 직급별 sal 합계
-- 부서(dept) 별 인원수
select dept,count(*) from emp group by dept;
-- 부서별 여자 인원수
select dept,count(*) from 테이블명
where mod(substr(rrn,8,1),2)=0
group by dept;
-- 부서에 여자가 없으면 안 나옴
select name, rrn, decode(mod(substr(rrn,8,1),2),0,1)
from 테이블명; -- 부서에 여자가 없으면 0 출력
-- 부서별 전체, 남자, 여자 인원수
select dept, count(*) 전체,
count(decode(mod(substr(rrn,8,1),2),1,1)) 남자,
count(decode(mod(substr(rrn,8,1),2),0,1)) 여자
from 테이블명
group by dept;
-- 부서 별 남자와 여자 비율
-- 부서명 남자 여자
select dept, count(*) 전체,
round(count(decode(mod(substr(rrn,8,1),2),1,1)) /count(*) * 100) 남자,
round(count(decode(mod(substr(rrn,8,1),2),0,1)) /count(*) * 100) 여자
from 테이블명
group by dept;
-- 부서별 남자와 여자의 급여 총합 및 평균
select dept,
decode(mod(substr(rrn,8,1),2), 1, '남자', '여자') 성별,
sum(sal) 총합,
trunc(avg(sal)) 평균
from 테이블명
group by dept, mod(substr(rrn,8,1),2)
order by dept;
HAVING 절 사용 예시
-- 부서별 인원수가 7명 이상 부서 출력
select dept, count(*)
from 테이블명
group by dept
having count(*) >= 7;
-- 부서별 여자 인원수 인원수가 5명 이상 부서 출력
select dept, count(*)
from 테이블명
where mod(substr(rrn, 8, 1), 2) = 0
group by dept
having count(*) >= 5;