[오라클(Oracle) ] 데이터 그룹 생성(GROUP BY 절) / HAVING 절
1. 데이터 그룹 생성(GROUP BY)
2. HAVING 절
1. 데이터 그룹 생성(GROUP BY 절)
특정 칼럼을 기준으로 행을 그룹별로 나누어 출력하도록 하는 작업이다. 학년별로 평균을 구할 경우엔 학년을 그룹으로 나누어 계산 후 출력하고 학과별 평균 또는 최댓값 등을 구할 경우에는 학과번호를 그룹으로 나누어 계산하여 출력할 수 있다.
1
2
3
4
|
select 칼럼
from 테이블
where 조건
group by 그룹지을 칼럼
|
cs |
이때 group by 절에 없는 칼럼이 select 절에 있을 수 없으며 group by 절에 있는 칼럼은 select 절에 따로 넣지 않아도 된다.
ex) student 테이블에서 학년별 키와 몸무게 평균을 출력(단, 4학년 제외)
1
2
3
4
|
select avg(height), avg(weight)
from student
where grade <> '4'
group by grade;
|
cs |
ex) professor 테이블에서 학과별 최대 급여를 출력
1
2
3
|
select max(sal)
from professor
group by deptno;
|
cs |
ex) professor 테이블에서 학과별 평균 급여와 이름을 출력
1
2
3
|
select name, avg(sal)
from professor
group by deptno;
|
cs |
--결과: 에러 (group by 절에 없는 name 칼럼이 select 절에 있을 수 없다)
ex) student 테이블에서 모든 학생을 학과별로 나눈 후 동일 학과 학생을 학년별로 그룹 지어 평균 키와 몸무게 출력
1
2
3
|
select deptno, grade, avg(height), avg(weight)
from student
group by deptno, grade;
|
cs |
이와 같이 2번 이상 그룹을 지을 경우 콤마(,)로 구분하여 이어서 넣어준다.
2. HAVING 절
HAVING은 GROUP BY 절에 의해 만들어진 그룹을 대상으로 조건을 적용하는 작업이다. 조건을 적용한다는 점에 있어 WHERE과 유사하지만 WHERE 절은 그룹을 지을 대상을 선별하는 작업(GROUP BY 작업을 할 대상들 선정), HAVING은 GROUP BY 결과 생성된 그룹에 적용하는 조건이라는 점에서 큰 차이가 있다.
1
2
3
4
5
6
|
select 칼럼
from 테이블
where 조건
group by 그룹지을 칼럼
having 조건
order by
|
cs |
ex) professor 테이블에서 평균 급여가 400 이상인 학과만을 출력
1
2
3
4
|
select deptno, avg(sal)
from professor
group by deptno
having avg(sal) >= 400;
|
cs |
ex) student 테이블에서 평균 신장이 170 이상인 학년만을 출력
1
2
3
4
|
select grade, avg(height)
from student
group by grade
having avg(height) >= 170;
|
cs |
ex) emp 테이블에서 직급이 '사원'인 직원들을 부서별로 그룹 지었을 때 평균 실적이 40점 이상인 부서만을 출력
1
2
3
4
5
|
select deptno, avg(score)
from emp
where job = '사원'
group by deptno
having avg(score) >= 40;
|
cs |
[오라클(Oracle) ] 데이터 그룹 생성(GROUP BY 절) / HAVING 절
-요약-
1. 데이터 그룹 생성(GROUP BY)
- 특정 칼럼으로 행을 그룹별로 나누어 출력
- where절 조건을 이용하여 그룹 지을 대상을 선별
- group by 절에 없는 칼럼은 select 절에 있을 수 없다
2. HAVING 절
- group by 절에 의해 만들어진 그룹을 대상으로 조건을 적용
'Database > Oracle' 카테고리의 다른 글
[오라클(Oracle) ] DDL( CREATE / ALTER / DROP / TRUNCATE ) (0) | 2022.04.14 |
---|---|
[오라클(Oracle) ] DML(INSERT / UPDATE / DELETE) (0) | 2022.04.14 |
[오라클(Oracle) ] 그룹 함수( count / sum / avg / max / min 함수) (0) | 2022.04.13 |
[오라클(Oracle) ] 일반 함수( nvl / decode / case 함수) (0) | 2022.04.13 |
[오라클(Oracle) ] 데이터 타입 변환 ( TO_CHAR / TO_DATE / TO_NUMBER) (0) | 2022.04.13 |
댓글