여러행함수 : Group by절, Having절
SQL함수에는 두가지 유형이 있다.
이 중 여러행함수에 대해 알아보자.
그룹함수는 테이블의 전체 행을 하나 이상의 컬럼을 기준으로 그룹화하여 그룹별로 결과를 출력하는 함수
Group by절
- 모두 사원 전체를 기준으로 데이터를 추출하는 것이 아닌 특정 그룹으로 묶어 데이터를 GROUP BY절로 집계할 수 있다. 즉 테이블안에서 또 다시 작은 테이블로 그룹을 나누고싶을때 사용.
- GROUP BY 구문은 WHERE와 ORDER BY절 사이에 위치한다. 문법이므로 정확한 위치에 적어여한다. 따라서 암기하기 쉽게 ORDER BY절이 항상 마지막이라고 생각하면된다.
예시1 : 하나의 테이블(emp)에서 부서별(deptno)로 평균급여(AVG(sal)) 조회(select)시 사용
예시2 : employees테이블에서 부서별로 job_id가 동일한 사원들의 평균급여를 출력시 사용.
- 모바일사업부에서 동일한 job_id(마케팅)를 가진 사원들의 평균 급여
- 모바일사업부에서 동일한 job_id(총무팀)를 가진 사원들의 평균 급여
- 모바일사업부에서 동일한 job_id(자재구매팀)를 가진 사원들의 평균 급여
- 화이트가전사업부에서 동일한 job_id(마케팅)를 가진 사원들의 평균 급여
- 화이트가전사업부에서 동일한 job_id(총무팅)를 가진 사원들의 평균 급여
- 화이트가전사업부에서 동일한 job_id(자재구매팀)를 가진 사원들의 평균 급여
1 | $ select dept_id, job_id, avg(salary) |
Having 절
조건문을 작성할수있는 절이다.
Where절과 Having절 차이
Where절도 조건문을 작성할 수 있는 절인데 이 둘의 차이가 뭘까?
- Where절 : 행 제한 조건문, 즉 단일행함수가 들어갈때 사용.
- Having절 : 행 그룹 제한 조건문, 즉 그룹함수가 들어갈때 사용.
아래 쿼리는 employees테이블에서
- job_id에
REP
가 들어가지 않은 job_id를 기준으로 - salary합계가 13000 초과하는 job_id별로 salary합계를
- 낮은순으로 정렬한 뒤
- PAYROLL로 제목을 나타내서 출력한다.
1 | $ select job_id, SUM(salary) PAYROLL |