COUNT() OVER() 함수
-- COUNT() OVER() 함수
SELECT name, dept, SAL,
COUNT(*) OVER( ORDER BY dept) cnt
FROM emp;
-- 부서별 인원수를 누적하여 앞 부서 인원수와 누적해서 출력
-- 동일 부서는 동일 인원
동일부서에는 동일한 인원의 합계가 출력된다. 개발부에는 14명이 존재하고 기획부에는 (21-14) 7명이 존재함.
SELECT name, dept, SAL,
COUNT(*) OVER( ORDER BY sal) cnt
FROM emp;
-- sal 오름차순으로 정렬하여 같은 sal이면 출력되는 COUNT 값은 같은 인원수를 가짐.
SELECT name, dept, SAL,
COUNT(*) OVER( ORDER BY sal DESC) cnt
FROM emp;
-- sal 내림차순으로 정렬하여 같은 sal이면 출력되는 COUNT 값은 같은 인원수를 가짐.
COUNT는 누적되는 것이고 같은 sal을 가지고 있으면 COUNT(같은 sal의 수를 출력하되 계속 누적됨) 위에 보는 것 처럼 11이 두명에게서 보인다.
SELECT name, dept, SAL,
COUNT(*) OVER() cnt
FROM emp; -- OVER에 아무것도 기술하지 않으면 전체
SELECT name, dept, SAL,
COUNT(*) OVER( PARTITION BY dept) cnt
FROM emp; -- 그룹의 인원수를 구하고 이전 그룹은 누적하지 않음
SELECT name, dept, SAL,
COUNT(*) OVER( PARTITION BY dept) cnt1,
COUNT(*) OVER( PARTITION BY dept ORDER BY pos) cnt2
FROM emp;
SELECT name, dept, SAL,
COUNT(*) OVER( PARTITION BY dept) cnt1,
COUNT(*) OVER( PARTITION BY dept ORDER BY empNo) cnt2
FROM emp;
COUNT() OVER( PARTITION BY ~) 그룹별로 해당하는 값만 출력하고 누적되지 않는다.
COUNT() OVER( PARTITION BY ~ ORDER BY) 같은 부서를 가지고 있으면 CNT1에 같은 값을 출력한다. CNT2에는 직위별로 정렬하여 세고 그 값은 동일 부서안에서만 누적된다.
개발부서의 인원수를 CNT1에서는 출력하고 CNT2에서는 empNo를 부서별로 누적해서 출력해준다.
SELECT name, dept, SAL,
COUNT(*) OVER( ORDER BY empNo) cnt
FROM emp
WHERE dept = '개발부';
-- 개발부서만 뽑아서 empNo 오름차순으로 누적하며 출력
SELECT name, dept, SAL,
COUNT(*) OVER( ORDER BY sal) cnt
FROM emp
WHERE dept = '개발부';
-- 개발부서만 뽑아서 sal 오름차순으로 누적하며 출력
'쌍용강북교육센터 > 8월' 카테고리의 다른 글
0810_Oracle : 꼭 기억해야하는 문장들 SELECT, INSERT, UPDATE, DELETE, CREATE (1) | 2021.08.10 |
---|---|
0809_Oracle : 분석함수, 데이터 정의언어 (2) | 2021.08.10 |
0809_Oracle : RANK() OVER() 순위를 매기는 함수 (2) | 2021.08.09 |
0806_Oracle : 단일행함수, 집계함수 (1) | 2021.08.06 |
0805_Oracle : 단일행함수 (1) | 2021.08.05 |