📚 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