有趣的Row_Number()错误

时间:2010-06-10 16:51:46

标签: sql sql-server tsql row-number analytic-functions

我正在玩Stack Exchange Data Explorer并运行此查询:
https://data.stackexchange.com/stackoverflow/query/2820/rising-stars-top-50-users-ordered-on-rep-per-day

在结果中注意,第11行和第12行具有相同的值,因此错误编号,即使row_number()函数采用与查询相同的参数顺序。

我知道正确的解决方法是在order by子句中指定一个额外的tie-breaker列,但是我更好奇为什么/ row_number()函数在同一数据上返回不同的结果?

如果它在任何地方产生影响,则会在Azure上运行。

4 个答案:

答案 0 :(得分:3)

它们没有被错误编号 - 您的ORDER BY用于不同的列。虽然它们最终会评估相同的值,但ROW_NUMBER中的ORDER BY不会被视为与查询的ORDER BY同步。

答案 1 :(得分:2)

问题似乎是有效数字。 例如:polygenelubricants在101天内获得22281的声望,而KennyTM在178天内获得了39257的声望。两个RepPerDays的整数部分为220,但多基因润滑剂的信誉/天数的浮动值为220.603 ####,KennyTM的浮动值为220.544 ####。

您应该尝试按声望/天数订购。

答案 2 :(得分:0)

行号是否只是某个包含查询结果的临时表中数据发生的行号?如果是,则结果是任意的,并且通常基于db引擎如何处理查询以及数据在源表中的存在方式相同。

答案 3 :(得分:0)

DENSE_RANKRANKROW_NUMBER如何在该查询中进行比较 - 仍然是不一致的行为?

显然首先分配了ROW_NUMBER(),但是ORDER BY没有指定输出按ROW_NUMBER排序,因此输出可以按任何顺序输出。

这样做:

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

它被命令匹配。