본문 바로가기
Database/Oracle

[오라클(Oracle) ] 데이터 그룹 생성(GROUP BY 절) / HAVING 절

by Ali1020 2022. 4. 14.

[오라클(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 절에 의해 만들어진 그룹을 대상으로 조건을 적용

댓글