Oracle 21c에 SKEWNESS_POP 함수와 SKEWNESS_SAMP 함수가 추가되었습니다. 두 함수는 집계 함수로 집계 대상의 대칭성을 나타내는 skewness 값을 반환합니다. SKEWNESS_POP 함수는 population(모집단) skewness 값, SKEWNESS_SAMPLE 함수는 sample(표본) skewness 값을 반환한다는 차이점이 있습니다.
SKEWNESS_POP ([ DISTINCT | ALL | UNIQUE ] expr)
SKEWNESS_SAMP ([ DISTINCT | ALL | UNIQUE ] expr)
테스트를 위해 아래와 같이 테이블을 생성하겠습니다. c3 ~ c6 칼럼은 분포가 좌측에 집중된 positive skew, c8 ~ c11 칼럼은 분포가 우측에 집중된 negative skew입니다. c7 칼럼은 symmetric distribution(균등 분포)입니다.
-- 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 테이블에 대한 SKEWNESS_POP 함수의 결과를 반환합니다.
-- 2
SELECT SKEWNESS_POP (c1) AS c1
, SKEWNESS_POP (c2) AS c2
, SKEWNESS_POP (c3) AS c3
, SKEWNESS_POP (c4) AS c4
, SKEWNESS_POP (c5) AS c5
, SKEWNESS_POP (c6) AS c6
, SKEWNESS_POP (c7) AS c7
, SKEWNESS_POP (c8) AS c8
, SKEWNESS_POP (c9) AS c9
, SKEWNESS_POP (c10) AS c10
, SKEWNESS_POP (c11) AS c11
, SKEWNESS_POP (c12) AS c12
FROM t1;
C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 C12
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
0.00 0.00 2.67 1.50 0.87 0.41 0.00 -0.41 -0.87 -1.50 -2.67 0.00
1개의 행이 선택되었습니다.
아래 쿼리는 c1 BETWEEN 3 AND 8 조건에 대한 SKEWNESS_POP 함수의 결과를 반환합니다.
-- 3
SELECT SKEWNESS_POP (c1) AS c1
, SKEWNESS_POP (c2) AS c2
, SKEWNESS_POP (c3) AS c3
, SKEWNESS_POP (c4) AS c4
, SKEWNESS_POP (c5) AS c5
, SKEWNESS_POP (c6) AS c6
, SKEWNESS_POP (c7) AS c7
, SKEWNESS_POP (c8) AS c8
, SKEWNESS_POP (c9) AS c9
, SKEWNESS_POP (c10) AS c10
, SKEWNESS_POP (c11) AS c11
, SKEWNESS_POP (c12) AS c12
FROM t1
WHERE c1 BETWEEN 3 AND 8;
C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 C12
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
0.00 0.00 0.00 0.00 1.79 0.71 0.00 -0.71 -1.79 0.00 0.00 0.00
1개의 행이 선택되었습니다.
아래 쿼리는 t1 테이블에 대한 SKEWNESS_SAMP 함수의 결과를 반환합니다.
-- 4
SELECT SKEWNESS_SAMP (c1) AS c1
, SKEWNESS_SAMP (c2) AS c2
, SKEWNESS_SAMP (c3) AS c3
, SKEWNESS_SAMP (c4) AS c4
, SKEWNESS_SAMP (c5) AS c5
, SKEWNESS_SAMP (c6) AS c6
, SKEWNESS_SAMP (c7) AS c7
, SKEWNESS_SAMP (c8) AS c8
, SKEWNESS_SAMP (c9) AS c9
, SKEWNESS_SAMP (c10) AS c10
, SKEWNESS_SAMP (c11) AS c11
, SKEWNESS_SAMP (c12) AS c12
FROM t1;
C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 C12
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
0.00 0.00 3.16 1.78 1.04 0.48 0.00 -0.48 -1.04 -1.78 -3.16 0.00
1개의 행이 선택되었습니다.
아래는 앞서 수행한 쿼리의 결과입니다. 분포가 좌측에 집중된 positive skew는 양수, 분포가 우측에 집중된 negative skew는 음수, symmetric distribution는 0을 반환합니다. 2, 3번 결과에서 모집단 크기가 클수록 skewness 값이 커지는 것을 알 수 있으며, 2, 4번 결과에서 sample skewness 값이 population skewness 값보다 큰 것을 알 수 있습니다.
C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 C12
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
0.00 0.00 2.67 1.50 0.87 0.41 0.00 -0.41 -0.87 -1.50 -2.67 0.00 -- 2
0.00 0.00 0.00 0.00 1.79 0.71 0.00 -0.71 -1.79 0.00 0.00 0.00 -- 3
0.00 0.00 3.16 1.78 1.04 0.48 0.00 -0.48 -1.04 -1.78 -3.16 0.00 -- 4
SKEWNESS_POP, SKEWNESS_SAMP 함수는 분석 함수로 사용할 수 있습니다.
-- 5
SELECT c1
, c10
, SKEWNESS_POP (c10) OVER (ORDER BY c1) AS c10_pop
, SKEWNESS_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.71 1.73
4 2 0.00 0.00
5 2 -0.41 -0.61
6 2 -0.71 -0.97
7 2 -0.95 -1.23
8 2 -1.15 -1.44
9 2 -1.34 -1.62
10 2 -1.50 -1.78
10 행이 선택되었습니다.
관련 링크