GROUP BY 절
- 그룹으로 묶기 위함
- 만약 그룹 조건이 여러 개일 경우 GROUP BY 절에 이어서 작성하면 됨
- 예시 1) 부서별 월급 평균을 구하라.
SELECT DEPTNO, AVG(NVL(sal, 0)) FROM emp GROUP BY DEPTNO; - 예시 2) 부서와 직업별 월급의 평균을 구하라. (단, 부서 번호와 직업에 따라 오름차순으로 정렬하라)
SELECT deptno, job, AVG(NVL(sal, 0)) "AVG" FROM emp GROUP BY deptno, job ORDER BY 1, 2;
- 주의사항
- SELECT 절에 사용된 그룹 함수 이외 컬럼이나 표현식은 반드시 GROUP BY 절에 사용되어야 함.
한 마디로 그룹핑 대상이 아닌 컬럼을 SELECT 절에 작성해서는 안 되며,
반대로 GROUP BY 절에 사용된 컬럼이더라도 SELECT 절에 사용할 필요는 없음. - GROUP BY 절에 반드시 컬럼명이 사용되어야 하며, 컬럼 Alias는 사용하면 안 됨.
SELECT 문의 실행 순서를 보면 SELECT 절은 GROUP BY 후에 실행됨.
HAVING 절
- 그룹핑한 조건으로 검색 가능
- WHERE절 vs HAVING절
--> WHERE : 출력 데이터의 조건
--> HAVING : 그룹핑한 데이터의 조건
- 예시) 부서 및 직업 별 연봉의 평균을 구하는데, 부서 번호가 20 이상이고, 연봉 평균이 3천 이상인 경우
SELECT DEPTNO, JOB, AVG(NVL(sal, 0)) FROM emp WHERE deptno > 10 HAVING AVG(NVL(sal,0)) >= 3000;
'DB > Oracle' 카테고리의 다른 글
[Oracle] 분석함수, 윈도함수 - CUBE (소계와 전체 합계 출력) (0) | 2021.08.03 |
---|---|
[Oracle] 분석함수, 윈도함수 - ROLLUP (기준별 소계 요약) (0) | 2021.08.03 |
[Oracle] SQL 복수행 함수(그룹 함수) (0) | 2021.07.27 |
[Oracle] 단일행 함수 - 정규식(Regular Expression) (2) (0) | 2021.07.27 |
[Oracle] 단일행 함수 - 정규식(Regular Expression) (1) (0) | 2021.07.20 |