Sql

ROW_NUMBER()OVER()関数の使用法におけるDB2



Db2 Row_number Over Function Usage



1、row_number()over()sorting:

(1)row_number()over()パケットソート:



時間のrow_number()over()関数を使用する場合、over()の実行順序と、後期のグループ化。

パケットの結果セットで分割するには、指定されていない場合、結果セット全体をパケットとして配置し、異なる集計関数を配置し、複数のレコードでパケットを返すことができますが、通常は、重合統計はの記録を反映しています。



例:セクターグループでソートされた従業員。

[sql] view plaincopy SELECT empno,WORKDEPT,SALARY, Row_Number() OVER (partition by workdept ORDER BY salary desc) rank FROM employee -------------------------------------- 000010 A00 152750 1 000110 A00 66500 2 000120 A00 49250 3 200010 A00 46500 4 200120 A00 39250 5 000020 B01 94250 1 000030 C01 98250 1 000130 C01 73800 2

(2)クエリ結果はソートされます:(グループ化なし)

[sql] view plaincopy SELECT empno,WORKDEPT,SALARY, Row_Number() OVER (ORDER BY salary desc) rank FROM employee -------------------------------------- 000010 A00 152750 1 000030 C01 98250 2 000070 D21 96170 3 000020 B01 94250 4 000090 E11 89750 5 000100 E21 86150 6 000050 E01 80175 7 000130 C01 73800 8 000060 D11 72250 9

row_number()over()およびrownumと同様の強力なポイント(1は各パケットの先頭から並べ替えることができます)。



2、ランク()オーバー()ソートはスキップされ、次のステップは4回目2秒です(各グループで同様)。

[sql]

  1. select workdept,salary,rank() over(partition by workdept order by salary) as dense_rank_order from emp order by workdept ------------------ A00 39250 1 A00 46500 2 A00 49250 3 A00 66500 4 A00 152750 5 B01 94250 1 C01 68420 1 C01 68420 1 C01 73800 3

3、dense_rank()over()は連続ソートであり、2番目の場所が2番目の場合でも3番目の場所が続きます。対照的に、row_numberは重複する値ではありません。

[sql] view plaincopy select workdept,salary,dense_rank() over(partition by workdept order by salary) as dense_rank_order from emp order by workdept ------------------ A00 39250 1 A00 46500 2 A00 49250 3 A00 66500 4 A00 152750 5 B01 94250 1 C01 68420 1 C01 68420 1 C01 73800 2 C01 98250 3

--- ROW_NUMBERを使用した@重複排除
---テーブルTABはa、b、cを3つと想定しています。次のステートメントを使用して、a、b、cが同一の重複を削除できます。

[sql] view plaincopy DELETE FROM (select year,QUARTER,RESULTS,row_number() over(partition by YEAR,QUARTER,RESULTS order by YEAR,QUARTER,RESULTS) AS ROW_NO FROM SALE ) WHERE ROW_NO>1