송민준의 개발노트
Oracle 비율 함수 본문
비율을 계산해주는 함수는 다음과 같다.
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 표준에는 없다. Oracle과 SQL 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 |