본문 바로가기
Programming/SQL

[SQL] 그룹별 비율 구하기(RATIO_TO_REPORT)

by 코딩하는 금융인 2023. 10. 29.

안녕하세요.

SQL이나 Oracle에서 그룹별로 비율 구하는 방법에 대해 알아보겠습니다.

 

 그룹별/그룹 내 비율 구하기

▣ 예시 데이터 : emp

empno ename job sal
7902 FORD ANALYST 3000
7788 SCOTT ANALYST 3000
7369 SMITH CLERK 800
7900 JAMES CLERK 950
7876 ADAMS CLERK 1100
7934 MILLER CLERK 1300
7782 CLARK MANAGER 2450
7698 BLAKE MANAGER 2850
7566 JONES MANAGER 2975
7839 KING PRESIDENT 5000
7654 MARTIN SALESMAN 1250
7521 WARD SALESMAN 1250
7844 TURNER SALESMAN 1500
7499 ALLEN SALESMAN 1600

 

▣ RATIO_TO_REPORT

RATIO_TO_REPORT OVER() * 100

- Oracle에서 비율을 구하기 위한 함수로 100을 곱하면 백분율로 사용 가능함
- 또한, Oracle이 아닌 다른 SQL 환경일 경우에는 비교값/SUM(비교값) 식을 대신 넣어주면 됨

 

: 예시 쿼리

SELECT ename,
	sal,
	ROUND(RATIO_TO_REPORT(sal) OVER(), 2) * 100 || '%' AS sal_percent
FROM emp
WHERE job = 'MANAGER' --특정 그룹 명시

결과 화면

 

▣ PARTITION BY 활용하여 그룹별 비율 구하기

RATIO_TO_REPORT OVER(PARTION BY COL1 ~)

- OVER()에 PARTITION BY 사용하면 해당 필드에 대해 그룹별 비율이 계산됨

- WHERE 조건문으로 나열 그룹 명시 가능함

 

: 예시 쿼리

SELECT ename,
	job,
	sal,
	ROUND(RATIO_TO_REPORT(sal) OVER(PARTITION BY job), 2) * 100 || '%' AS sal_percent
FROM emp
WHERE job in ('MANAGER', 'CLERK') -- 그룹별 명시

결과 화면

 

반응형

댓글