📚 Study/Oracle

Oracle :: 그룹 함수(SUM, AVG, COUNT, MAX, MIN, VARIANCE, STDDEV, MAX, MIN, 중첩 그룹함수)

bono-hye 2023. 10. 25. 22:45

■ 그룹함수

- 종류 : SUM() 합, AVG() 평균, COUNT() 카운트, MAX() 최대값, MIN() 최소값, VARIANCE() 분산, STDDEV() 표준편차

- 그룹 함수는 처리해야 할 데이터들 중 NULL 이 존재한다면, NULL은 제외하고 연산 수행!! 연산의 대상에서 제외!!!

 

■ SUM() 합

--○ SUM() 합
-- EMP 테이블을 대상으로 전체 사원들의 급여
SELECT SAL
FROM EMP;
--==>>
/*
800
1600
1250
2975
1250
2850
2450
3000
5000
1500
1100
950
3000
1300
*/

SELECT SUM(SAL)     -- 800 + 1600 + 1250 + ... + 1300
FROM EMP;
--==>> 29025

SELECT COMM
FROM EMP;
--==>>
/*
(null)
300
500
(null)
1400
(null)
(null)
(null)
(null)
0
(null)
(null)
(null)
(null)
*/


SELECT SUM(COMM)            -- NULL + 300 + 500 + NULL + ... + MNULL (X)  이렇게 계산된 것이 아닌 NULL은 제외 후 연산!
FROM EMP;
--==>> 2200

 

■ COUNT() 행(레코드)의 갯수 조회 → 데이터가 몇 건인지 확인

--○ COUNT() 행(레코드)의 갯수 조회 → 데이터가 몇 건인지 확인
SELECT COUNT(ENAME)
FROM EMP;
--==>> 14

SELECT COUNT(COMM)
FROM EMP;
--==>> 4

SELECT COUNT(*)
FROM EMP;
--==>> 14

 

■ AVG() 평균 반환

- 평균 계산 시, NULL 값이 존재하는 경우 연산에서 제외되기 때문에 신경써서 처리해줘야 해!!

--○ AVG() 평균 반환
SELECT AVG(SAL) "COL1"
     , SUM(SAL) / COUNT(SAL) "COL2"
     , 29025 / 14 "COL3"
FROM EMP;
--==>>
/*
2073.214285714285714285714285714285714286	
2073.214285714285714285714285714285714286
2073.214285714285714285714285714285714286
*/

SELECT AVG(COMM) "COL1"
     , SUM(COMM) / COUNT(COMM) "COL2"
     , 2200 / 4 "COL3"              -- 4 : NULL값을 제외하여 카운트 함
     , 2200 / 14 "COL4"
FROM EMP;
--==>>
/*
550	
550	
550	
157.142857142857142857142857142857142857
*/

--※ 데이터가 NULL인 컬럼의 레코드는 연산 대상에서 제외되기 때문에
--   주의하여 연산 처리해야 한다.

SELECT SUM(COMM) / COUNT(*) "COL1"
FROM EMP;
--==>> 157.142857142857142857142857142857142857

 

■ VARIANCE() 분산 / STDDEV() 표준편차

- 표준편차의 제곱 = 분사

- 분산의 제곱근 = 표준편차

-- VARIANCE() / STDDEV()
-- ※ 표준편차의 제곱이 분산, 분산의 제곱근이 표준편차

SELECT VARIANCE(SAL), STDDEV(SAL)
FROM EMP;
--==>>
/*
1398313.87362637362637362637362637362637	
1182.503223516271699458653359613061928508
*/

SELECT POWER(STDDEV(SAL), 2) "COL1"
     , VARIANCE(SAL) "COL2"
FROM EMP;
--==>>
/*
1398313.87362637362637362637362637362637	
1398313.87362637362637362637362637362637
*/


SELECT SQRT(VARIANCE(SAL)) "COL1"
     , STDDEV(SAL) "COL2"
FROM EMP;
--==>>
/*
1182.503223516271699458653359613061928508	
1182.503223516271699458653359613061928508
*/

 

■ MAX() 최대값 / MIN() 최소값

-- MAX() / MIN()
-- 최대값 / 최소값 반환
SELECT MAX(SAL) "COL1"
     , MIN(SAL) "COL2"
FROM EMP;
--==>> 5000	800

 

(파일명 20231025_01_scott)

■ 중첩 그룹함수

- 그룹 함수는 2 LEVEL 까지 중첩해서 사용 가능! (오라클만 가능, MYSQL 불가)

SELECT SUM(SAL)
FROM EMP
GROUP BY DEPTNO;
--==>>
/*
9400
10875
8750
*/

SELECT MAX(SUM(SAL)) "COL1"
FROM EMP
GROUP BY DEPTNO;
--==>> 10875