ROW_NUMBER

ROW_NUMBER関数は分析関数で、この関数が適用される各行(パーティションの各行、または問合せが戻す各行)にOrderByClauseで指定された行の順序シーケンスで1から始まる一意の数値を割り当てます。

SQL構文

ROW_NUMBER () OVER ( [QueryPartitionClause] OrderByClause )

パラメータ

ROW_NUMBERには、次のパラメータがあります。

パラメータ 説明

QueryPartitionClause

構文、セマンティクスおよび制限の詳細は、「分析関数」を参照してください。

OrderByClause

構文、セマンティクスおよび制限の詳細は、「分析関数」を参照してください。

説明

  • ROWNUM擬似列は、表や結合処理された行の集合からTimesTenが行を選択する順序を示す番号を戻します。その一方、分析関数であるROW_NUMBERは、番号を割り当てる前に問合せの結果の順序付けを強力にサポートします。

  • 指定された範囲のROW_NUMBER値を取得する問合せ内に、ROW_NUMBERを使用した副問合せをネストすることで、内側の問合せの結果から正確な行のサブセットを得ることができます。一貫した結果を戻すには、問合せで決定的なソート順序を使用する必要があります。

  • 戻りデータ型は、NUMBERです。

ROW_NUMBERを使用すると、各部門の最も支給額の高い上位3人の従業員が戻されます。従業員が3人未満の部門については、3行未満の行が戻されます。

Command> SELECT FIRST 10 department_id, first_name, last_name, salary
         FROM
          (SELECT department_id, first_name, last_name, salary, ROW_NUMBER()
             OVER (PARTITION BY department_id ORDER BY salary desc) rn
           FROM employees )
         WHERE rn <= 3
         ORDER BY department_id, salary DESC, last_name;
< 10, Jennifer, Whalen, 4400 >
< 20, Michael, Hartstein, 13000 >
< 20, Pat, Fay, 6000 >
< 30, Den, Raphaely, 11000 >
< 30, Alexander, Khoo, 3100 >
< 30, Shelli, Baida, 2900 >
< 40, Susan, Mavris, 6500 >
< 50, Adam, Fripp, 8200 >
< 50, Matthew, Weiss, 8000 >
< 50, Payam, Kaufling, 7900 >
10 rows found.