SKEWNESS_POP 함수와 SKEWNESS_SAMP 함수

2023. 5. 30.·Oracle/SQL

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

 

관련 링크

  • SQL Language Reference - SKEWNESS_POP
  • SQL Language Reference - SKEWNESS_SAMP
  • ORACLE-BASE - SKEWNESS_POP and SKEWNESS_SAMP Analytic Functions
저작자표시 비영리 변경금지 (새창열림)
'Oracle/SQL' 카테고리의 다른 글
  • BITOR 함수와 BITXOR 함수
  • KURTOSIS_POP 함수와 KURTOSIS_SAMP 함수
  • 비트 연산
  • Bitmap-based COUNT (DISTINCT) Functions
정희락
정희락
2007년부터 Oracle Database 성능 최적화에 주력해 왔으며, 현재 한국오라클 Engineered Systems Solution Engineering 팀에서 Solution Engineer로 근무하고 있습니다. 이 블로그는 개인적인 연구 목적으로 운영되며, Oracle 사의 공식 입장을 대변하지 않습니다.
  • 정희락
    TunA
    정희락
  • 전체
    오늘
    어제
    • 분류 전체보기 (199)
      • Oracle (171)
        • SQL (33)
        • PLSQL (10)
        • Performance (74)
        • Administration (37)
        • Installation (3)
        • Utilities (1)
        • JSON (8)
        • Vector (5)
      • Exadata (15)
      • SQL*Plus (2)
      • Linux (5)
      • Resources (6)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 도서

    • 불친절한 SQL 프로그래밍
    • 불친절한 PL/SQL 프로그래밍
  • 링크

    • Connor McDonald
    • Frits Hoogland
    • Jonathan Lewis
    • Julian Dontcheff
    • Julian Dyke
    • Kun Sun
    • Maria Colgan
    • Martin Bach
    • Mike Dietrich
    • Tanel Poder
  • 공지사항

  • 인기 글

  • 태그

    12c
    19c
    21c
    23ai
    case study
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
정희락
SKEWNESS_POP 함수와 SKEWNESS_SAMP 함수
상단으로

티스토리툴바