본문 바로가기

📚Study Note/ORACLE

[ ORACLE ] 그룹함수 : SUM() AVG() COUNT() MAX() MIN() VARIANCE() STDDEV()

-- ※ 그룹 함수의 가장 큰 특징은
-- 처리해야 할 데이터들 중 NULL이 존재하면
-- 이 NULL 은 제외하고 연산을 수행한다는 것이다 .

-- ■■■  그룹 함수 ■■■

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

-- ※ 그룹 함수의 가장 큰 특징은
-- 처리해야 할 데이터들 중 NULL이 존재하면
-- 이 NULL 은 제외하고 연산을 수행한다는 것이다 .


-- ●SUM() 

--EMP 테이블을 대상으로 전체 사원들의 급여 총합을 조회한다.


SELECT SAL,SUM(SAL)
FROM EMP;
--===>> 오류뜸


SELECT SUM(SAL)
FROM EMP;

--==>>29025


SELECT SUM(COMM)
FROM EMP;
--==>> 2200 (NULL 값이 존재함에도 그것을 제외하고 연산해서 결과 반환)

--● COUNT()
--행의 갯수 조회하여 결과값 반환

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


SELECT COUNT(COMM)
FROM EMP;
--===>>4 (NULL이 들어있는 레코드를 제외하고 카운트해준다)

--따라서 일반적으로 레코드 수를 계산하기 위해서는 특정 컬럼을 지정해서 하는 것이 아니라 아래와 같이 함

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


--● AVG() 
-- 평균 반환
SELECT SUM(SAL) / COUNT(SAL)"1", AVG(SAL) "2"
FROM EMP;


--==>>2073.214285714285714285714285714285714286	
--2073.214285714285714285714285714285714286 (둘 다 똑같이 나온다.)



SELECT AVG(COMM)
FROM EMP;
--==>>550 → 직원들의 수당 평균

SELECT SUM(COMM) / COUNT(COMM)
FROM EMP;


SELECT SUM(COMM) / COUNT(*)
FROM EMP;
--==>>157.142857142857142857142857142857142857
--  사실 이게 맞는 값이다.


--※ 표준편차의 제곱이 분산
--   분산의 제곱근이 표준편차
SELECT AVG(SAL), VARIANCE(SAL), STDDEV(SAL)
FROM EMP;

--2073.214285714285714285714285714285714286	
--1398313.87362637362637362637362637362637	
--1182.503223516271699458653359613061928508


SELECT POWER(STDDEV(SAL),2), VARIANCE(SAL)
FROM EMP;
--==>>1398313.87362637362637362637362637362637	1398313.87362637362637362637362637362637 (둘값이같다)


SELECT SQRT(VARIANCE(SAL)), STDDEV(SAL)
FROM EMP;
--1182.503223516271699458653359613061928508	
--1182.503223516271699458653359613061928508



-- ● MAX() MIN()


--최대값과 최소값을 반환하게 되는 함수이다
SELECT MAX(SAL), MIN(SAL)
FROM EMP;
--==>>5000	800

-- ※ 주의할 것!!

--SELECT ENAME, SUM(SAL)
---FROM EMP;
--==>>   "not a single-group group function" 
--=>> 에러발생
--SELECT DEPTNO, SUM(SAL)
--FROM EMP;
--==>> 에러발생






SELECT DEPTNO, SUM(SAL)
FROM EMP
GROUP BY DEPTNO
ORDER BY DEPTNO;
--===>>
/*
10	8750
20	10875
30	9400*/







SELECT  DEPTNO "부서번호", SUM(SAL) "급여합"
FROM EMP
GROUP BY ROLLUP(DEPTNO);
/*
10	    8750
20	    10875
30	    9400
(NULL)	29025*/ --→ 전체 합까지 나온다.