説明
この関数は、順序付き行グループ内の各行のランクを計算します。ランクの値は 1 から始まる連続した整数であり、最大のランク値はクエリ結果に一致する値です。同じ値のソート基準を持つ行は同じランクを受け取り、同じ行数は次のランキングに記録されません。集計または分析関数として使用できます。
説明
- 集計関数として、
DENSE_RANK指定されたソート仕様に基づいて、関数のパラメータで識別される仮想行の密なランクを計算します。定数パラメータ式exprとorder_by_clause集計内の式は位置に応じてマッチします。したがって、パラメータの数は同じでなければならず、型も互換性がある必要があります。 - 分析関数として、
DENSE_RANKorder_by_clause内のvalue_exprsの値に基づいて、クエリから返される各行の他の行に対するランクを計算します。
構文
/*集計構文*/
DENSE_RANK(expr [, expr ...])
WITHIN GROUP ( ORDER BY expr_col [ DESC | ASC ][ NULLS { FIRST | LAST } ]
[,expr_col [ DESC | ASC ][ NULLS { FIRST | LAST } ]]...
)
/*分析構文*/
DENSE_RANK( ) OVER([ query_partition_clause ] order_by_clause)
パラメータの説明
| パラメータ | 説明 |
|---|---|
| expr | 対応する列のデータ型の値。 |
| expr_col | クエリ対象の値に対応する列名を指定します。 |
| DESC | ASC | 列のソート方法を指定します。オプションです。
|
| NULLS { FIRST | LAST } | ソート後の expr_col 内の 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 DENSE_RANK(3300) WITHIN GROUP (ORDER BY sal) FROM emp_msg;
+-----------------------------------------+
| DENSE_RANK(3300)WITHINGROUP(ORDERBYSAL) |
+-----------------------------------------+
| 12 |
+-----------------------------------------+
1 row in set
分析関数の例
列 deptno でグループ化し、列 sal で降順にソートして、列 sal 内の各値のランクを返します。
obclient> SELECT deptno,ename, sal,
DENSE_RANK ( ) OVER (PARTITION BY deptno ORDER BY sal DESC ) "RANK"
FROM emp_msg;
+--------+--------+------+------+
| DEPTNO | ENAME | SAL | RANK |
+--------+--------+------+------+
| 10 | KING | 5300 | 1 |
| 10 | CLARK | 2750 | 2 |
| 10 | MILLER | 1600 | 3 |
| 20 | FORD | 3300 | 1 |
| 20 | SCOTT | 3300 | 1 |
| 20 | JONES | 3275 | 2 |
| 20 | ADAMS | 1400 | 3 |
| 20 | SMITH | 1100 | 4 |
| 30 | BLAKE | 3150 | 1 |
| 30 | ALLEN | 1900 | 2 |
| 30 | TURNER | 1800 | 3 |
| 30 | SCLARK | 1750 | 4 |
| 30 | MARTIN | 1550 | 5 |
| 30 | WARD | 1550 | 5 |
| 30 | JAMES | 1250 | 6 |
+--------+--------+------+------+
15 rows in set