説明
この関数は、一連の値における特定の値の累積分布を計算し、(0,1] の範囲で返します。この関数は集約または分析関数として使用できます。
説明
- 分析関数として、この関数は指定された値の一連の値における相対的位置を計算します。行
rowについて、昇順に並べ替えられていると仮定すると、rowのcume_distは、rowの値以下または等しい値を持つ行数を、計算対象の行数(クエリ結果セット全体またはパーティション)で割ったものです。 - 集約関数として、この関数のパラメータは各集約グループ内の単一の仮想行を識別します。したがって、それらはすべて各集約グループ内の定数式として計算されなければなりません。定数パラメータ式と
ORDER BY集約句の式は位置によってマッチングされます。そのため、パラメータの数は同じであり、その型は互換性がある必要があります。指定された値がグループ化シーケンス内の他の値と重複する場合、2つの重複する値は1つの値として処理されます。
構文
/*集計構文*/
CUME_DIST( expr[,expr]...)
WITHIN GROUP (ORDER BY expr_col [ DESC | ASC ][ NULLS { FIRST | LAST } ]
[,expr_col [ DESC | ASC ][ NULLS { FIRST | LAST } ]]...
)
/*分析構文*/
CUME_DIST() OVER ([ query_partition_clause ] order_by_clause)
パラメータの説明
| パラメータ | 説明 |
|---|---|
| expr | クエリ対象の値を指定します。 |
| expr_col | クエリ対象の値に対応する列名を指定します。 |
| DESC | ASC | 列のソート方法を指定します。オプションです。 ASC は昇順ソートで、デフォルト値です。 DESC は降順ソートです。 |
| NULLS { FIRST | LAST } | ソート後の expr_col 内の NULL 値の位置を指定します。オプションです。 NULLS FIRST は NULL 値が非NULL値の前に配置されることを意味します。 NULLS LAST は NULL 値が非NULL値の後ろに配置されることを意味し、デフォルト値です。 |
| OVER | OVER 句を使用してウィンドウを定義し、計算を行います。詳細については、分析関数の説明を参照してください。 |
返り値の型
返り値はNUMBERデータ型です。
例
既に作成されたテーブル emp_msg があります。
obclient> SELECT * FROM emp_msg;
+--------+--------+------+------+
| DEPTNO | ENAME | SAL | MGR |
+--------+--------+------+------+
| 10 | CLARK | 2750 | 7839 |
| 10 | KING | 5300 | NULL |
| 10 | MILLER | 1600 | 7782 |
| 20 | ADAMS | 1400 | 7788 |
| 20 | FORD | 3300 | 7566 |
| 20 | JONES | 3275 | 7839 |
| 20 | SCOTT | 3300 | 7566 |
| 20 | SMITH | 1100 | 7902 |
| 30 | ALLEN | 1900 | 7698 |
| 30 | BLAKE | 3150 | 7839 |
| 30 | JAMES | 1250 | 7698 |
| 30 | MARTIN | 1550 | 7698 |
| 30 | TURNER | 1800 | 7698 |
| 30 | WARD | 1550 | 7698 |
| 30 | SCLARK | 1750 | 7839 |
+--------+--------+------+------+
15 rows in set
集計関数の例
列 sal 内の 3300 の位置を返します。
obclient> SELECT CUME_DIST(3300) WITHIN GROUP (ORDER BY sal) FROM emp_msg;
+----------------------------------------+
| CUME_DIST(3300)WITHINGROUP(ORDERBYSAL) |
+----------------------------------------+
| .9375 |
+----------------------------------------+
1 row in set
分析関数の例
列 deptno でグループ化し、列 sal を降順にソートして、列 sal 内の各値の位置を返します。
obclient> SELECT deptno,ename,sal,
CUME_DIST ( ) over (PARTITION BY deptno ORDER BY sal DESC ) "RANK"
FROM emp_msg;
+--------+--------+------+-------------------------------------------+
| DEPTNO | ENAME | SAL | RANK |
+--------+--------+------+-------------------------------------------+
| 10 | KING | 5300 | .3333333333333333333333333333333333333333 |
| 10 | CLARK | 2750 | .6666666666666666666666666666666666666667 |
| 10 | MILLER | 1600 | 1 |
| 20 | FORD | 3300 | .4 |
| 20 | SCOTT | 3300 | .4 |
| 20 | JONES | 3275 | .6 |
| 20 | ADAMS | 1400 | .8 |
| 20 | SMITH | 1100 | 1 |
| 30 | BLAKE | 3150 | .1428571428571428571428571428571428571429 |
| 30 | ALLEN | 1900 | .2857142857142857142857142857142857142857 |
| 30 | TURNER | 1800 | .4285714285714285714285714285714285714286 |
| 30 | SCLARK | 1750 | .5714285714285714285714285714285714285714 |
| 30 | MARTIN | 1550 | .8571428571428571428571428571428571428571 |
| 30 | WARD | 1550 | .8571428571428571428571428571428571428571 |
| 30 | JAMES | 1250 | 1 |
+--------+--------+------+-------------------------------------------+
15 rows in set