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 행이 선택되었습니다.
관련 링크