여러행함수 : Group by절, Having절

여러행함수 : Group by절, Having절

SQL함수에는 두가지 유형이 있다.

  1. 단일행함수 : 행당 하나의 결과 반환
  2. 여러행함수 : 행 집합당 하나의 결과 반환
    1. 그룹함수
    2. Group by절
    3. Having절

이 중 여러행함수에 대해 알아보자.
그룹함수는 테이블의 전체 행을 하나 이상의 컬럼을 기준으로 그룹화하여 그룹별로 결과를 출력하는 함수




Group by절

  • 모두 사원 전체를 기준으로 데이터를 추출하는 것이 아닌 특정 그룹으로 묶어 데이터를 GROUP BY절로 집계할 수 있다. 즉 테이블안에서 또 다시 작은 테이블로 그룹을 나누고싶을때 사용.
  • GROUP BY 구문은 WHERE와 ORDER BY절 사이에 위치한다. 문법이므로 정확한 위치에 적어여한다. 따라서 암기하기 쉽게 ORDER BY절이 항상 마지막이라고 생각하면된다.

예시1 : 하나의 테이블(emp)에서 부서별(deptno)로 평균급여(AVG(sal)) 조회(select)시 사용

https://slidesplayer.org/slide/14993143/

예시2 : employees테이블에서 부서별로 job_id가 동일한 사원들의 평균급여를 출력시 사용.

- 모바일사업부에서 동일한 job_id(마케팅)를 가진 사원들의 평균 급여
- 모바일사업부에서 동일한 job_id(총무팀)를 가진 사원들의 평균 급여
- 모바일사업부에서 동일한 job_id(자재구매팀)를 가진 사원들의 평균 급여
- 화이트가전사업부에서 동일한 job_id(마케팅)를 가진 사원들의 평균 급여
- 화이트가전사업부에서 동일한 job_id(총무팅)를 가진 사원들의 평균 급여
- 화이트가전사업부에서 동일한 job_id(자재구매팀)를 가진 사원들의 평균 급여
1
2
3
$ select dept_id, job_id, avg(salary)
$ from employees
$ group by dept_id, job_id




Having 절

조건문을 작성할수있는 절이다.

Where절과 Having절 차이

Where절도 조건문을 작성할 수 있는 절인데 이 둘의 차이가 뭘까?

  • Where절 : 행 제한 조건문, 즉 단일행함수가 들어갈때 사용.
  • Having절 : 행 그룹 제한 조건문, 즉 그룹함수가 들어갈때 사용.

아래 쿼리는 employees테이블에서

  • job_id에 REP가 들어가지 않은 job_id를 기준으로
  • salary합계가 13000 초과하는 job_id별로 salary합계를
  • 낮은순으로 정렬한 뒤
  • PAYROLL로 제목을 나타내서 출력한다.
1
2
3
4
5
6
$ select job_id, SUM(salary) PAYROLL
$ from employees
$ where job_id not like '%REP%'
$ group by job_id
$ having SUM(salary) > 13000
$ order by SUM(salary)




Group by절과 Having절 예시

https://www.w3resource.com/sql/aggregate-functions/count-having.php