1

Stack Exchange Data Explorerで遊んでいて、次のクエリを実行しました:
https://data.stackexchange.com/stackoverflow/query/2820/rising-stars-top-50-users-ordered-on-rep-per-day

結果に注目してください。row_number() 関数はクエリと同じパラメーターによる順序をとりますが、行 11 と 12 は同じ値を持つため、番号が間違っています。

ここでの正しい修正は、order by 句で追加のタイブレーカー列を指定することだとわかっていますが、row_number() 関数が同じデータに対して異なる結果を返す理由/方法についてもっと知りたいですか?

どこかで違いがあれば、これは Azure で実行されます。

4

4 に答える 4

3

それらは番号が間違っていません-ORDER BYは別の列用です。最終的には同じ値を評価しますが、ROW_NUMBER の ORDER BY はクエリの ORDER BY と同期しているとは見なされません。

于 2010-06-10T17:01:17.877 に答える
2

問題は有効数字にあるようです。例: polygenelubricants は 101 日間で 22281 の評判を得ており、KennyTM は 178 日間で 39257 の評判を得ています。両方の RepPerDays の整数部分は 220 ですが、polygenelubricants の Reputation/Days の浮動小数点値は 220.603#### で、KennyTM は 220.544#### です。

どちらの場合も、評判/日数で注文するようにしてください。

于 2010-06-10T17:08:08.207 に答える
0

行番号は、クエリの結果を保持する一時テーブルにデータが存在する行の番号ですか? その場合、結果は任意であり、通常、db エンジンがクエリを処理する方法とソース テーブルにデータがどのように存在するかに基づいて同じになります。

于 2010-06-10T16:57:48.510 に答える
0

DENSE_RANKそのクエリでRANKと をROW_NUMBER比較する方法- まだ一貫性のない動作はありますか?

ROW_NUMBER() は明らかに最初に割り当てられますが、ORDER BY は出力が ROW_NUMBER でソートされることを指定していないため、出力は任意の順序で出力できます。

これを行う:

ORDER BY
RepPerDays DESC, Row_number() OVER(ORDER BY Reputation/Days DESC)​

そして、それは一致するように注文されています。

于 2010-06-10T17:03:45.157 に答える