송민준의 개발노트

Oracle 비율 함수 본문

DB/쿼리

Oracle 비율 함수

송민준 2020. 8. 11. 23:56

비율을 계산해주는 함수는 다음과 같다.

1. CUME_DIST

2. PERCENT_RANK

3. NTILE

4. RATIO_TO_REPORT

 

1. CUME_DIST

- 파티션 전체 건수에서 현재 행보다 작거나 같은 건수에 대해 누적 백분율을 계산해주며 0과 1사이에 값이 분포해있다.

select deptno, ename, sal,
       cume_dist() over(order by sal desc) as c_s
from emp;

위 쿼리를 실행하면 백분율 처럼 나온다.

과거 학창시절 성적 백분율 나오는 그런거...

2. PERCENT_RANK

- ANSI/ISO SQL 표준과 Oracle DBMS에서 지원해준다.

- 파티션에서 제일 먼저 나온 것을 0, 제일 늦게 나온 것을 1로 하여 값이 아닌 행의 순서별 백분율을 계산해준다.

select deptno, ename, sal,
       percent_rank() over (PARTITION BY DEPTNO order by sal desc) as p_s
from emp;

위 쿼리를 보면 부서별 급여를 내림차순 해서 PERCENT_RANK를 구한다.

급여가 같은 경우 같은 P_S 를 나타내고 다음 순서는 한칸 밀려난다.

 

3. NTILE

- ANSI/ISO SQL 표준에는 없다. OracleSQL Server에서 지원해줌

- 파티션별로 전체 건수를 ARGUMENT 값으로 X 등분한 결과를 계산해준다.

select deptno, ename, sal,
       ntile(5) over (order by sal desc) as n_s
from emp;

위 쿼리를 보면 5를 인자값으로 줘서 5등분을 한다.

나머지값들은 그냥 나오는듯...

select deptno, ename, sal,
       ntile(2) over (PARTITION BY DEPTNO order by sal desc) as n_s
from emp;

이건 부서별로 적용했을 경우

 

4. RATIO_TO_REPORT

- 마찬가지로 ANSI/ISO SQL 표준에는 없으며 Oracle에서만 지원해준다.

- 파티션 내에 전체 sum에 대한 행 별 칼럼값의 백분율을 소수점까지 조회해준다.

select deptno, ename, sal,
       ratio_to_report(sal) over() as c_s
from emp order by sal desc;

위 쿼리를 보면 급여를 기준으로 전체 급여에서 몇 % 를 차지하는지 나타낸다.

순서대로 보고싶다면 메인쿼리에서 order by를 사용해줘야 한다.

'DB > 쿼리' 카테고리의 다른 글

Oracle 날짜 기간 row로 뽑기  (0) 2020.10.06
Oracle 행 함수  (0) 2020.08.09
Oracle 순위 함수(Rank) 사용법~!!!  (0) 2020.08.06
oracle 개행 넣기  (0) 2020.08.05
(oracle) 다른 테이블 값 참조해서 update 해주기  (0) 2020.08.04