WITH T AS ( SELECT 'AA' AS "A", 'AA' AS "B", 10 AS VALUE FROM DUAL UNION ALL SELECT 'AA' AS "A", 'CC' AS "B", 20 AS VALUE FROM DUAL UNION ALL SELECT 'AA' AS "A", 'AA' AS "B", 30 AS VALUE FROM DUAL UNION ALL SELECT 'AA' AS "A", 'CC' AS "B", 30 AS VALUE FROM DUAL ) SELECT A.A ,A.B ,A.VALUE ,RATIO_TO_REPORT(A.VALUE) OVER (PARTITION BY A.A, A.B) AS RATIO FROM T A ORDER BY A.A, A.B
설명
RATIO_TO_REPORT(A.VALUE) OVER (PARTITION BY A.A, A.B) AS RATIO
PARTITION BY A.A, A.B의 컬럼의 그룹지어 VALUE 값을 더한우 A.VALUE값에 나눈 값
결과를 보고 이야기 하자면
A B VALUE RATIO AA AA 30 0.75 AA AA 10 0.25 AA CC 30 0.6 AA CC 20 0.4
일때 PARTITION BY A.A, A.B에 의해서 컬럼 A, B의 값이 AA, AA 값들끼리 그룹지어진 VALUE 합한 값 즉 30, 하고 10을 더하면 40이 나오고 첫번째 행인 AA, AA 30에 40을 나눈 값이 RATIO의 값이 된다 따라서 RATIO값이 0.75이다
A B VALUE RATIO 계산식 AA AA 30 0.75 30/(30+10) AA AA 10 0.25 10/(30+10) AA CC 30 0.6 30/(30+20) AA CC 20 0.4 20/(30+20)
728x90
반응형
'DB > Oracle' 카테고리의 다른 글
오라클 특수문자 검색 (0) | 2018.02.15 |
---|---|
패키지 내에서 사용 테이블 정보 출력 (0) | 2018.02.15 |
NTITLE() (0) | 2018.02.15 |
오라클 쿼리실행 시간 체크 (0) | 2018.02.15 |
오라클 PIVOT/UNPIVOT (0) | 2018.02.15 |