본문 바로가기
Dev/Database

SQL - 그룹 함수 2 (group by문과 having 조건)

by vellahw 2022. 8. 30.

(Oracle DB 사용 / 툴: SQL Developer / scott 계정 사용) 

 


1. GROUP BY 절

칼럼의 값 별로 그룹 함수의 결과값을 구한다.
특정 칼럼값을 기준으로 테이블을 그룹별로 나누기 위해서 사용

select 칼럼명, 그룹함수 
from 테이블명
where 조건(연산자)
group by 칼럼명;

 

ex-1) 사원들을 사원 번호를 기준으로 그룹 짓기

select deptno
from emp
group by deptno;

 

ex-2) 사원들을 사원 번호를 기준으로 그룹 짓고 각 그룹의 급여의 합계와 평균 구하기

select deptno, sum(sal), round(avg(sal))
from emp
group by deptno;

(평균값의 소숫점 자리를 반올림 하기 위해 round 함수 이용)

30번 사원들의 급여 총 합계 9400, 평균 1567

20번 사원들의 급여 총 합계 10875, 평균 2175

10번 사원들의 급여 총 합계 8750, 평균 2917

 

ex-3) 사원들을 사원 번호를 기준으로 그룹 짓고 각 그룹의 최저 급여와 최대 급여 구하기

select deptno, min(sal), max(sal)
from emp
group by deptno;

30번 그룹의 최저 급여 950, 최대 급여 2850

20번 그룹의 최저 급여 800, 최대 급여 3000

10번 그룹의 최저 급여 1300, 최대 급여 5000

 

ex-4) 부서별 사원의 수와 커미션을 받는 사원의 수를 카운트 해보기

select deptno, count(deptno), count(comm)
from emp
group by deptno;

30번 그룹의 총 사원 수 6명, 그 중 커미션을 받는 사원 수 3명 

20번 그룹의 총 사원 수 5명, 그 중 커미션을 받는 사원 수 0명 

10번 그룹의 총 사원 수 3명, 그 중 커미션을 받는 사원 수 0명 

 

 

 

2. HAVING 조건

그룹의 결과를 제한할 때 사용한다.

 

ex-1) 부서 번호로 그룹을 짓고 급여의 평균이 2000보다 크거나 작은 그룹만 구하기

select deptno, avg(sal)
from emp
group by deptno
having avg(sal) >= 2000;

 

- having 조건 없이 출력 했을 때의 결과

 

ex-2) 부서 번호로 그룹을 짓고 최대 급여와 최저 급여를 구하고 최대 급여가 2900보다 큰 그룹만 출력하기

select deptno, max(sal), min(sal)
from emp
group by deptno
having max(sal) > 2900;

 

- having 조건 없이 출력 했을 때의 결과

 

 

'Dev > Database' 카테고리의 다른 글

JDBC 프로그래밍  (0) 2022.09.06
데이터베이스 프로그래밍  (0) 2022.09.05
SQL - JOIN 조인 2 (Outer Join, Self Join)  (0) 2022.08.31
SQL - JOIN 조인 1 (Equi Join, Non-Equi Join )  (0) 2022.08.30
SQL - 그룹 함수 1  (0) 2022.08.30

댓글