728x90
반응형
GROUP BY절
데이터 그룹화 : 여러 데이터에서 의미 있는 하나의 결과를 특정 열 값별로 묶어 출력
SELECT [조회할 열1], [조회할 열2], ..., [열N 이름]
FROM [조회할 테이블명]
WHERE [조회할 행을 선별하기 위한 조건식]
GROUP BY [그룹화할 열 지정 (여러 개 가능)]
ORDER BY [정렬할 열 지정];
EX! 부서별 평균 급여 (통합)
-- 하드 코딩 방식임
SELECT AVG(SAL), '10' AS DEPTNO FROM EMP WHERE DEPTNO = 10
UNION ALL
SELECT AVG(SAL), '20' AS DEPTNO FROM EMP WHERE DEPTNO = 20
UNION ALL
SELECT AVG(SAL), '30' AS DEPTNO FROM EMP WHERE DEPTNO = 30;
-- 위의 쿼리를 GROUP BY절을 이용해 작성
SELECT AVG(SAL), DEPTNO
FROM EMP
GROUP BY DEPTNO;
-- 부서의 직책별 평균 급여
SELECT DEPTNO, JOB, AVG(SAL) -- 부서 번호로 먼저 묶고 직책으로 다시 묶음
FROM EMP
GROUP BY DEPTNO, JOB
ORDER BY DEPTNO, JOB;
유의점!?
SELECT절에서 다중행 함수를 사용하지 않은 일반 열을 GROUP BY절에 명시해야 함!
DEPTNO, JOB 모두 GROUP BY절에 등록해야지, 하나라도 안하면 오류 메세지 출력!
HAVING절
GROUP BY절을 통해 그룹화된 결과 값의 범위를 제한하는 데 사용
SELECT [조회할 열1], [조회할 열2], ..., [열N 이름]
FROM [조회할 테이블명]
WHERE [조회할 행을 선별하기 위한 조건식]
GROUP BY [그룹화할 열 지정 (여러 개 가능)]
HAVING [출력 그룹에 대한 조건식]
ORDER BY [정렬할 열 지정];
WHERE절 : 출력 대상 행을 제한!
HAVING절 : 그룹화된 대상을 출력에서 제한!
-- WHERE절이 GROUP BY절, HAVING절보다 먼저 실행 (처음부터 제거될 목적이면 WHERE절을 함께 사용)
SELECT DEPTNO, JOB, AVG(SAL)
FROM EMP
WHERE SAL <= 3000
GROUP BY DEPTNO, JOB
HAVING AVG(SAL) >= 2000
ORDER BY DEPTNO, JOB;728x90
반응형
'Programming > Database' 카테고리의 다른 글
| [ORACLE 초급] 문법별 JOIN 사용법 - 내부조인, 외부조인, JOIN ~ USING/ON (0) | 2020.09.20 |
|---|---|
| [ORACLE 중급] 그룹화 함수 - ROLLUP, CUBE, GROUPING, PIVOT 등 (0) | 2020.09.18 |
| [ORACLE 초급] 오라클 함수 - 단일행 함수(문자, 날짜, 숫자 ...), 다중행 함수(SUM, AVG, COUNT ...) (0) | 2020.09.14 |
| [ORACLE 초급] 조건 검색 - WHERE, 연산자 (0) | 2020.09.14 |
| [ORACLE 초급] SELECT문 - SELECT, FROM, ORDER BY (0) | 2020.09.13 |