SQL - GROUP BY 절과 HAVING 절

이승범·2024년 9월 15일

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;
profile
creative

0개의 댓글