"오라클 비율 ratio to report"의 두 판 사이의 차이
DB CAFE
(새 문서: === 오라클 비율 RATIO_TO_REPORT === # 오라클에서 전체 합계 대비 비율 또는 백분율을 구하기 위한 함수 # RATIO_TO_REPORT 이용하여 비율 반환 # 여...) |
|||
5번째 줄: | 5번째 줄: | ||
==== 비율 구하기 ==== | ==== 비율 구하기 ==== | ||
# 조회된 전체 급여(sal) 합계 대비 해당 행의 비율 반환 | # 조회된 전체 급여(sal) 합계 대비 해당 행의 비율 반환 | ||
− | < | + | <source lang=sql> |
SELECT ename | SELECT ename | ||
, sal | , sal | ||
16번째 줄: | 16번째 줄: | ||
==== 백분율 구하기 ==== | ==== 백분율 구하기 ==== | ||
# 비율에서 소수점 둘째자리 자른다음 100을 곱하면 백분율 | # 비율에서 소수점 둘째자리 자른다음 100을 곱하면 백분율 | ||
− | < | + | <source lang=sql> |
SELECT ename | SELECT ename | ||
, sal | , sal | ||
26번째 줄: | 26번째 줄: | ||
==== GROUP BY 비율 구하기 ==== | ==== GROUP BY 비율 구하기 ==== | ||
# 그룹함수를 사용한 컬럼인 경우 RATIO_TO_REPORT 함수 인자에 그룹함수 값 대입 필요 | # 그룹함수를 사용한 컬럼인 경우 RATIO_TO_REPORT 함수 인자에 그룹함수 값 대입 필요 | ||
− | < | + | <source lang=sql> |
SELECT job | SELECT job | ||
, SUM(sal) AS total_sal | , SUM(sal) AS total_sal | ||
35번째 줄: | 35번째 줄: | ||
==== ROLLUP 백분율 구하기 ==== | ==== ROLLUP 백분율 구하기 ==== | ||
# ROLLUP 함수를 사용하여 합계를 구하고 싶을 경우,SELECT 문을 다시 감싸서 결과 산출 | # ROLLUP 함수를 사용하여 합계를 구하고 싶을 경우,SELECT 문을 다시 감싸서 결과 산출 | ||
− | < | + | <source lang=sql> |
SELECT DECODE(GROUPING(job), 1, '합계', job) AS job | SELECT DECODE(GROUPING(job), 1, '합계', job) AS job | ||
, SUM(total_sal) AS total_sal | , SUM(total_sal) AS total_sal | ||
51번째 줄: | 51번째 줄: | ||
==== PARTITION BY 사용하여 백분율 구하기 ==== | ==== PARTITION BY 사용하여 백분율 구하기 ==== | ||
# OVER 함수에 PARTITION BY를 사용하여 해당 컬럼의 그룹별 비율 계산 | # OVER 함수에 PARTITION BY를 사용하여 해당 컬럼의 그룹별 비율 계산 | ||
− | < | + | <source lang=sql> |
SELECT ename | SELECT ename | ||
, job | , job |
2023년 2월 13일 (월) 16:48 판
thumb_up 추천메뉴 바로가기
- DBA { Oracle DBA 명령어 > DBA 초급 과정 > DBA 고급 과정 }
- 튜닝 { 오라클 튜닝 목록 }
- 모델링 { 데이터 모델링 가이드 }
목차
1 오라클 비율 RATIO_TO_REPORT[편집]
- 오라클에서 전체 합계 대비 비율 또는 백분율을 구하기 위한 함수
- RATIO_TO_REPORT 이용하여 비율 반환
- 여기에 100을 곱하면 백분율(%)로 바꿀 수 있다.
1.1 비율 구하기[편집]
- 조회된 전체 급여(sal) 합계 대비 해당 행의 비율 반환
SELECT ename
, sal
, RATIO_TO_REPORT(sal) OVER() AS sal_ratio
FROM emp
WHERE job = 'MANAGER'
1.2 백분율 구하기[편집]
- 비율에서 소수점 둘째자리 자른다음 100을 곱하면 백분율
SELECT ename
, sal
, ROUND(RATIO_TO_REPORT(sal) OVER(), 2) * 100 || '%' AS sal_rate
FROM emp
WHERE job = 'MANAGER'
1.3 GROUP BY 비율 구하기[편집]
- 그룹함수를 사용한 컬럼인 경우 RATIO_TO_REPORT 함수 인자에 그룹함수 값 대입 필요
SELECT job
, SUM(sal) AS total_sal
, RATIO_TO_REPORT(SUM(sal)) OVER() AS sal_ratio
FROM emp
GROUP BY job
1.4 ROLLUP 백분율 구하기[편집]
- ROLLUP 함수를 사용하여 합계를 구하고 싶을 경우,SELECT 문을 다시 감싸서 결과 산출
SELECT DECODE(GROUPING(job), 1, '합계', job) AS job
, SUM(total_sal) AS total_sal
, ROUND(SUM(sal_ratio), 2) * 100 || '%' AS sal_ratio
FROM (
SELECT job
, SUM(sal) AS total_sal
, RATIO_TO_REPORT(SUM(sal)) OVER() AS sal_ratio
FROM emp
GROUP BY job
)
GROUP BY ROLLUP(job)
1.5 PARTITION BY 사용하여 백분율 구하기[편집]
- OVER 함수에 PARTITION BY를 사용하여 해당 컬럼의 그룹별 비율 계산
SELECT ename
, job
, sal
, ROUND(RATIO_TO_REPORT(sal) OVER(PARTITION BY job), 2) * 100 || '%' AS sal_rate
FROM emp
WHERE job IN ('ANALYST', 'MANAGER')