説明
この関数は分析関数であり、各行(グループ)のレコードに対して一意の番号を返します。この番号は、order_by_clause で指定された列に基づいてソートされ、1 から始まります。同じデータが存在する場合、ランキングはレコードセット内の記録順に順次増加し、異なるデータについては順次ランク付けされます。
構文
ROW_NUMBER( ) OVER ([ query_partition_clause ] order_by_clause)
パラメータの説明
OVER 句を使用してウィンドウを定義し、計算を行います。詳細については、分析関数の説明を参照してください。
戻り値の型
数値型データを返します。
例
既に作成されたテーブル emp_msg があります。emp_msg テーブルを照会し、deptno フィールドでグループ化し、列 sal を降順にソートして、列 sal 内の各値の番号を返します。
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
obclient> SELECT deptno,ename,sal,
ROW_NUMBER() OVER (PARTITION BY deptno ORDER BY sal DESC)
FROM emp_msg;
+--------+--------+------+---------------------------------------------------+
| DEPTNO | ENAME | SAL | ROW_NUMBER()OVER(PARTITIONBYDEPTNOORDERBYSALDESC) |
+--------+--------+------+---------------------------------------------------+
| 10 | KING | 5300 | 1 |
| 10 | CLARK | 2750 | 2 |
| 10 | MILLER | 1600 | 3 |
| 20 | FORD | 3300 | 1 |
| 20 | SCOTT | 3300 | 2 |
| 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 | 6 |
| 30 | JAMES | 1250 | 7 |
+--------+--------+------+---------------------------------------------------+
15 rows in set