説明
この関数は、一連の値の中で特定の値のランキングを計算します。同じソート値が存在する場合、それらは同じランキングを持ち、値が同じ行の数は次のランキングに記録されます。この関数は集約関数または分析関数として使用できます。
説明
- 集約関数として、
RANKはパラメータexprで識別される仮定行の、指定されたソート規範に対するランキングを計算します。パラメータ式exprとORDER BY集約句内の式は位置が一致します。したがって、パラメータの数は同じでなければならず、データ型も互換性が必要です。 - 解析関数として、
RANKはクエリが返す他の行に対する、クエリで返される各行のランキングを計算します。これは、order_by_clauseに基づいて、value_exprsの値に基づいて行われます。
構文
/*集約構文*/
RANK(expr [, expr ]...) WITHIN GROUP
( ORDER BY
expr_col [ DESC | ASC ][ NULLS { FIRST | LAST } ]
[, expr_col [ DESC | ASC ][ NULLS { FIRST | LAST } ]]...
)
/*分析構文*/
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 RANK(3300) WITHIN GROUP (ORDER BY sal) FROM emp_msg;
+-----------------------------------+
| RANK(3300)WITHINGROUP(ORDERBYSAL) |
+-----------------------------------+
| 13 |
+-----------------------------------+
1 row in set
分析関数の例
列 deptno でグループ化し、列 sal で降順にソートして、列 sal 内の各値のランキングを返します。
obclient> SELECT deptno,ename,sal,
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 | 3 |
| 20 | ADAMS | 1400 | 4 |
| 20 | SMITH | 1100 | 5 |
| 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 | 7 |
+--------+--------+------+------+
15 rows in set