[Oracle] 오라클 - GROUP BY절 (HAVING 절)
by mini_min[Oracle]
오라클 - GROUP BY절 (HAVING 절)
✔️ 집계 함수란?
단일 행이 아닌, 행 그룹을 기반으로 단일 결과 행을 반환하는 함수
집계 함수는 SELECT, ORDER BY, HAVING 절에서 사용가능, WHERE 에서 사용할 수 없다.
✔️ GROUP BY 절
소그룹에 대한 항목별로 통계 정보를 얻을 때 사용한다.
❌ ALIAS 명을 사용할 수 없다.
WHERE 절이 먼저 실행 이후 GROUP BY 실행된다.
WHERE 조건 실행 후 GROUP BY 실행한다.
원칙적으로 ORDER BY 명시해야 정렬이 수행된다.
✔️ HAVING 절
조회된 테이블, 뷰의 개별 행 값이 아니라 집계 함수의 결과를 기반으로 출력에서 그룹을 제거한다.
GROUP BY 끝난 다음에는 HAVING 절에서 기술한다. (둘이 순서는 상관없지만),
일반적으로 GROUP BY 다음에 온다.
💡 집계함수 포함 실행 순서
FROM - WHERE - GROUP BY - HAVING - ORDER BY
✔️ GROUP BY 예제
GROUP BY 로 묶어줘야 풀리는 문제들이 많다. @@의 ## 값을 구하려면, @@ 그룹으로 묶어주는게 중요함
-- 부서별 여자 사원 수 : 여자 사원이 없는 부서는 출력 되지 않음
SELECT DISTINCT dept, COUNT(*)
FROM emp
WHERE MOD(SUBSTR(rrn,8,1),2) = 0
GROUP BY dept;
-- dept의 pos별 급여 총합
SELECT dept, pos, SUM(sal)
FROM emp
GROUP BY dept, pos
ORDER BY dept, pos;
-- 개발부 인원수
SELECT dept, COUNT(*)
FROM emp
WHERE dept = '개발부'
GROUP BY dept;
SELECT dept, COUNT(*) 전체,
COUNT(DECODE(MOD(SUBSTR(rrn, 8,1),2),1,1)) 남자,
COUNT(DECODE(MOD(SUBSTR(rrn, 8,1),2),0,1)) 여자
FROM emp
GROUP BY dept;
--부서별 남자와 여자 급여 총합, 평균
SELECT dept 부서,
DECODE(MOD(SUBSTR(rrn,8,1),2),0,'남자', '여자') 성별,
COUNT(DECODE(MOD(SUBSTR(rrn, 8,1),2),1,0,1)) 인원수,
TO_CHAR(SUM(sal), 'L99,999,999') "급여 총합",
TO_CHAR(AVG(sal), 'L9,999,999') 평균
FROM emp
GROUP BY dept, MOD(SUBSTR(rrn,8,1),2)
ORDER BY dept;
✔️ HAVING 절 예제
-- 부서별 인원수가 7명 이상인 경우
SELECT dept, COUNT(*)
FROM emp
GROUP BY dept
HAVING COUNT(*) >=7;
--부서별 여자 인원수 5명 이상
SELECT dept, COUNT(*)
FROM emp
WHERE MOD(SUBSTR(rrn,8,1),2)=0
GROUP BY dept
HAVING COUNT(*)>=5;
'SQL쿼리' 카테고리의 다른 글
[Oracle] 오라클 - EXTRACT/MONTHS_BETWEEN/NEXT_DAY (0) | 2022.08.09 |
---|---|
[Oracle] 오라클 - 단일행 날짜 함수 (TO_DATE/TO_CHAR/INTERVAL) (0) | 2022.08.09 |
[Oracle] 오라클 - 집계함수(COUNT), SUM/MAX/MIN/AVG (0) | 2022.08.08 |
[Oracle] 오라클 - 단일행 문자 함수 (LPAD/RPAD/TRIM/TRANSLATE) (0) | 2022.08.06 |
[Oracle] 오라클 - 단일행 문자 함수 (INSTR/LENGTH/REPLACE/CONCAT) (0) | 2022.08.06 |
블로그의 정보
개발자 미니민의 개발로그
mini_min