1

我正在使用Stack Exchange 数据资源管理器并运行此查询:
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

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

行号是否只是数据发生在某个保存查询结果的临时表中所在的行号?如果是这样,那么结果是任意的,并且通常是相同的,这取决于数据库引擎如何处理查询以及数据在源表中的存在方式。

于 2010-06-10T16:57:48.510 回答
0

如何在该查询DENSE_RANKRANK进行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 回答