개발자 미니민의 개발스터디

[Oracle] 오라클 - AVG() OVER() / MAX() 와 MIN() / RATIO_TO_REPORT()

by mini_min
[Oracle]
오라클 - AVG() OVER() / MAX() 와 MIN() / RATIO_TO_REPORT()

✔️ 분석 함수 2탄

3) AVG() OVER() 함수

-- 평균과의 차이

SELECT name, dept, sal, sal - ROUND(AVG(sal) OVER()) 평균과의 차이 FROM emp;

 

-- 부서별 평균 (PARTITION BY)

	SELECT name, dept, sal, ROUND(AVG(sal) OVER(PARTITION BY dept)) FROM emp;
		--부서별 평균 (오더바이 붙이면 누적)

 

-- 부서별 평균, 이지만 이전 부서와 누적해서 평균 계산

SELECT name, dept, sal, ROUND(AVG(sal) OVER(ORDER BY dept)) FROM emp;
		--부서별 평균인데, 다음 부서는 이전 부서와 합쳐서 평균 계산

 

 

 

4) MAX() OVER()와 MIN() OVER() 함수

최대와 최소값을 구해서 파티션 별로 구분할 수 있다.

SELECT name, sal, MAX(sal) OVER() , MIN(sal) OVER() FROM emp;
		SELECT name, sal, MAX(sal) OVER() - sal 최대와 차이 FROM emp;

 

-- 부서별 최대치 급여 구하기

SELECT name, dept, sal, MAX(sal) OVER(PARTITION BY dept) 부서최대 FROM emp;

 

 

 

5) RATIO_TO_REPORT() OVER() 함수

백분율 쉽게 구할 수 있는 함수. 첫번째 코드처럼 짜기 힘들 때 사용하면 좋다. 

--전체 중에 몇퍼인지 계산하고 싶을 때,
	SELECT dept, ROUND( COUNT(*) / SELECT COUNT(*) FROM emp *100 ) 비율
	FROM emp
	GROUP BY dept;
    
    
    --초간단...
	SELECT dept, ROUND( RATIO_TO_REPORT( COUNT(*) ) OVER() *100 ) 비율
	FROM emp
	GROUP BY dept;

 

 

 

 

 

 

블로그의 정보

개발자 미니민의 개발로그

mini_min

활동하기