영보의 SystemOut.log

[Oracle] SQL 복수행함수 / 그룹함수 / 집합함수 / SQL 함수 예제 본문

Database/Oracle

[Oracle] SQL 복수행함수 / 그룹함수 / 집합함수 / SQL 함수 예제

영보로그 2020. 8. 11. 15:09
반응형

# 복수행 함수(그룹/집합함수) : 한꺼번에 여러 건의 데이터가 함수로 입력됨

 


함수이름

의미

COUNT

  입력되는 데이터의 총 건수를 출력

   - COUNT(*)        : NULL값을 포함 
   - COUNT(컬럼명) : NULL값을 제외

SUM

  입력되는 데이터의 합계 값 구해서 출력  

AVG

  입력되는 데이터의 평균값 구해서 출력  

MAX

  입력되는 데이터 중 가장 큰 값을 출력   최대값 (자동 증가번호)

MIN

  입력되는 데이터 중 가장 작은 값을 출력  

STDDEV

  입력되는 데이터 값들의 표준 편차 값 출력  

VARIANCE

  입력되는 데이터 값들의 분산 값 출력  

ROLLUP

  입력되는 데이터의 소계값을 자동으로 계산해서 출력   ROW 단위 계산 => 통계

CUBE

  입력되는 데이터의 소계 및 전체 총계를 자동 계산 후 출력   ROW, COLUMN단위 전체 통계 

GROUPINGSET

  한 번의 쿼리로 여러 개의 함수들을 그룹으로 수행 가능  

RANK

  입력되는 데이터의 그룹에서 값의 순위를 계산한 후 순위 출력 함수   RANK() OVER(ORDER BY 컬럼명 ASC|DESC)

DENSE_RANK

    DENSE_RANK() OVER(ORDER BY 컬럼명 ASC|DESC)

 

 ▶ 컬럼이나 단일행 함수를 같이 사용하면 안된다.
    단, GROUP BY 를 이용하면 사용이 가능하다

 

 

 

 

# COUNT, SUM, AVG 예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
SELECT COUNT(*), COUNT(mgr), COUNT(comm) FROM emp;
 
SELECT MAX(sal) "최대급여", MIN(sal) "최소급여", COUNT(*"사원수", SUM(sal) "급여 총합", AVG(sal) "급여 평균" FROM emp;
 
-- 10,20,30 -> 별로 인원수, 급여합, 급여 평균
SELECT COUNT(*) , SUM(sal), AVG(sal) FROM emp WHERE deptno=10;
 
-- 10,20,30 -> 별로 인원수, 급여합, 급여 평균
SELECT COUNT(*) , SUM(sal), AVG(sal) FROM emp WHERE deptno=20;
 
-- 10,20,30 -> 별로 인원수, 급여합, 급여 평균
SELECT COUNT(*) , SUM(sal), AVG(sal) FROM emp WHERE deptno=30;
 
-- 10,20,30 -> 별로 인원수, 급여합, 급여 평균
SELECT deptno, COUNT(*) , SUM(sal), AVG(sal) FROM emp GROUP BY deptno;
 
--입사년도별로 인원수, 급여함, 급여 평균
SELECT SUBSTR(hiredate, 1,2), COUNT(*) , SUM(sal), AVG(sal) FROM emp GROUP BY SUBSTR(hiredate, 1,2);
SELECT TO_CHAR(hiredate,'YYYY'), COUNT(*), SUM(sal), AVG(sal) FROM emp GROUP BY TO_CHAR (hiredate,'YYYY');
 
--부서별로 급여합, 평균을 구한다
-- => 전체 평균보다 많이 받는 부서만 출력
SELECT deptno, COUNT(*), SUM(sal), AVG(sal) FROM emp GROUP BY deptno HAVING AVG(sal)>(SELECT AVG(sal) FROM emp);
cs

 

 

 

#ROLLBACK, ROLLUP 예제

1
2
3
4
5
6
7
8
9
10
11
12
--ROLLBACK;
SELECT ROUND(AVG(sal),2),SUM(sal) FROM emp;
 
SELECT STDDEV(sal), VARIANCE(sal) FROM emp;
 
 
--ROLLUP
SELECT deptno, job, COUNT(*), ROUND(AVG(sal),2FROM emp GROUP BY deptno, job;
 
SELECT deptno, job, COUNT(*), ROUND(AVG(sal),2FROM emp GROUP BY ROLLUP(deptno, job);
 
SELECT deptno, job, COUNT(*), ROUND(AVG(sal),2FROM emp GROUP BY CUBE(deptno, job);
cs

 

반응형