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 |