Digking's cave

함수 - 5.그룹함수와 HAVING절 본문

기초/Oracle

함수 - 5.그룹함수와 HAVING절

디깅 2019. 4. 24. 10:11
728x90

--1) 주제 : 그룹함수와 HAVING절
--        HAVING절은 WHERE절과 동일하다.
--        단 조건 내용에 그룹 함수를 포함하는 것만을 포함한다.
--        일반 조건은 WHERE 에 기술하지만 그룹 함수를 포함한 조건은 HAVING절에 기술한다.
--        
--2) 용법
--SELECT [DISTINCT/ALL] 컬럼 OR 그룹함수...
--FROM 테이블
--WHERE 조건
--GROUP BY 그룹대상
--HAVING 그룹함수 포함조건
--ORDER BY 정렬대상 [ASC/DESC];
--a) HAVING : 조건 중에 그룹함수를 포함하는 조건을 기술한다
--b) HAVING절은 GROUP BY 절 뒤에 기술한다

--부서별 급여 평균이 3천달러 미만인 부서의 부서번호와 평균 급여를 검색한다. 
-- ~별이면 GROUP BY
SELECT dno, ROUND(AVG(sal))
FROM emp
GROUP BY dno
HAVING AVG(sal) < 3000;

--아래는 job이 그룹으로 묶인 컬럼이 아니기 때문에 HAVING절에 사용하면 안된다.
--HAVING에는 dno에 관한 것만 넣어야 한다
SELECT dno 부서번호, COUNT(*) 인원수
FROM emp
GROUP BY dno
HAVING job != '개발'; 

--일반컬럼인 job은 WHERE절에 옮겨야 한다
SELECT dno 부서번호, COUNT(*) 인원수
FROM emp
WHERE job != '개발'
GROUP BY dno;

--GROUP으로 묶인 컬럼은 HAVING절에 조건을 기술한다.
SELECT dno 부서번호, COUNT(*) 인원수
FROM emp
WHERE job != '개발'
GROUP BY dno
HAVING dno != '10';

SELECT dno 부서번호, job 업무, COUNT(*) 인원수
FROM emp
GROUP BY dno, job
HAVING job != '개발'; 

반응형

'기초 > Oracle' 카테고리의 다른 글

다중행 서브 쿼리  (0) 2019.04.24
서브 쿼리  (0) 2019.04.24
함수 - 4.그룹함수  (0) 2019.04.24
함수 - 3.변환함수  (0) 2019.04.24
함수 - 2.숫자함수  (0) 2019.04.24