안녕하세요.
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') -- 그룹별 명시
반응형
'Programming > SQL' 카테고리의 다른 글
[SQL] 여러 행 합치기 (3) | 2023.11.14 |
---|---|
[SQL] 예제 데이터 테이블 생성하기 (2) | 2023.11.04 |
[SQL] 구분자 추가하기 (QUOTENAME) (4) | 2023.10.22 |
[SQL] PIVOT & UNPIVOT 함수와 예제 (3) | 2023.07.05 |
[SQL] 그룹 소계 함수 및 예제 (ROLLUP, CUBE) (1) | 2023.07.02 |
댓글