Oracle 21c에 KURTOSIS_POP 함수와 KURTOSIS_SAMP 함수가 추가되었습니다. 두 함수는 집계 함수로 집계 대상의 모양을 나타내는 kurtosis 값을 반환합니다. KURTOSIS_POP 함수는 population(모집단) kurtosis 값, KURTOSIS_SAMPLE 함수는 sample(표본) kurtosis 값을 반환한다는 차이점이 있습니다.
KURTOSIS_POP ([ DISTINCT | ALL | UNIQUE ] expr) KURTOSIS_SAMP ([ DISTINCT | ALL | UNIQUE ] expr)
테스트를 위해 아래와 같이 테이블을 생성하겠습니다. c3, c4, c10, c11 칼럼은 1, 2의 분포가 큰 반면, C5 ~ C7 칼럼은 1, 2의 분포가 비슷합니다.
-- 1 DROP TABLE t1 PURGE; CREATE TABLE t1 ( c1 NUMBER, c2 NUMBER, c3 NUMBER, c4 NUMBER, c5 NUMBER, c6 NUMBER , c7 NUMBER, c8 NUMBER, c9 NUMBER, c10 NUMBER, c11 NUMBER, c12 NUMBER ); INSERT INTO t1 VALUES ( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2); INSERT INTO t1 VALUES ( 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2); INSERT INTO t1 VALUES ( 3, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2); INSERT INTO t1 VALUES ( 4, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2); INSERT INTO t1 VALUES ( 5, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2); INSERT INTO t1 VALUES ( 6, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2); INSERT INTO t1 VALUES ( 7, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2); INSERT INTO t1 VALUES ( 8, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2); INSERT INTO t1 VALUES ( 9, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2); INSERT INTO t1 VALUES (10, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2); COMMIT;
아래 쿼리는 t1 테이블에 대한 KURTOSIS_POP 함수의 결과를 반환합니다. 1, 2의 분포가 큰 c3, c4, c10, c11 칼럼은 양수, 1, 2의 분포가 비슷한 C5 ~ C7 칼럼은 음수를 반환합니다.
-- 2 SELECT KURTOSIS_POP (c2) AS c2 , KURTOSIS_POP (c3) AS c3 , KURTOSIS_POP (c4) AS c4 , KURTOSIS_POP (c5) AS c5 , KURTOSIS_POP (c6) AS c6 , KURTOSIS_POP (c7) AS c7 , KURTOSIS_POP (c8) AS c8 , KURTOSIS_POP (c9) AS c9 , KURTOSIS_POP (c10) AS c10 , KURTOSIS_POP (c11) AS c11 , KURTOSIS_POP (c12) AS c12 FROM t1; C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 C12 ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ 0.00 5.11 0.25 -1.24 -1.83 -2.00 -1.83 -1.24 0.25 5.11 0.00 1개의 행이 선택되었습니다.
아래 쿼리는 c1 BETWEEN 3 AND 8 조건에 대한 KURTOSIS_POP 함수의 결과를 반환합니다.
-- 3 SELECT KURTOSIS_POP (c2) AS c2 , KURTOSIS_POP (c3) AS c3 , KURTOSIS_POP (c4) AS c4 , KURTOSIS_POP (c5) AS c5 , KURTOSIS_POP (c6) AS c6 , KURTOSIS_POP (c7) AS c7 , KURTOSIS_POP (c8) AS c8 , KURTOSIS_POP (c9) AS c9 , KURTOSIS_POP (c10) AS c10 , KURTOSIS_POP (c11) AS c11 , KURTOSIS_POP (c12) AS c12 FROM t1 WHERE c1 BETWEEN 3 AND 8; C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 C12 ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ 0.00 0.00 0.00 1.20 -1.50 -2.00 -1.50 1.20 0.00 0.00 0.00 1개의 행이 선택되었습니다.
아래 쿼리는 t1 테이블에 대한 KURTOSIS_SAMP 함수의 결과를 반환합니다.
-- 4 SELECT KURTOSIS_SAMP (c2) AS c2 , KURTOSIS_SAMP (c3) AS c3 , KURTOSIS_SAMP (c4) AS c4 , KURTOSIS_SAMP (c5) AS c5 , KURTOSIS_SAMP (c6) AS c6 , KURTOSIS_SAMP (c7) AS c7 , KURTOSIS_SAMP (c8) AS c8 , KURTOSIS_SAMP (c9) AS c9 , KURTOSIS_SAMP (c10) AS c10 , KURTOSIS_SAMP (c11) AS c11 , KURTOSIS_SAMP (c12) AS c12 FROM t1; C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 C12 ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ 0.96 10.00 1.41 -1.22 -2.28 -2.57 -2.28 -1.22 1.41 10.00 0.96 1개의 행이 선택되었습니다.
아래는 앞서 수행한 쿼리의 결과입니다. 2, 3번 결과에서 모집단 크기가 클수록 kurtosis 값이 커지는 것을 알 수 있으며, 2, 4번 결과에서 sample kurtosis 값이 population kurtosis 값보다 큰 것을 알 수 있습니다.
C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 C12 ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ 0.00 5.11 0.25 -1.24 -1.83 -2.00 -1.83 -1.24 0.25 5.11 0.00 -- 2 0.00 0.00 0.00 1.20 -1.50 -2.00 -1.50 1.20 0.00 0.00 0.00 -- 3 0.96 10.00 1.41 -1.22 -2.28 -2.57 -2.28 -1.22 1.41 10.00 0.96 -- 4
KURTOSIS_POP, KURTOSIS_SAMP 함수는 분석 함수로 사용할 수 있습니다.
-- 5 SELECT c1 , c10 , KURTOSIS_POP (c10) OVER (ORDER BY c1) AS c10_pop , KURTOSIS_SAMP (c10) OVER (ORDER BY c1) AS c10_samp FROM t1; C1 C10 C10_POP C10_SAMP -- --- ------- -------- 1 1 0.00 0.00 2 1 0.00 0.00 3 2 0.00 0.00 4 2 -2.00 -6.00 5 2 -1.83 -3.33 6 2 -1.50 -1.88 7 2 -1.10 -0.84 8 2 -0.67 -0.00 9 2 -0.21 0.73 10 2 0.25 1.41 10 행이 선택되었습니다.
관련 링크