(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 |
댓글