如果我将ROW_NUMBER添加到一个简单的select查询中,结果似乎会由ROW_NUMBER列自动排序,即使最后没有将order by添加到select查询中。我试过这个
ROW_NUMBER -结果是随机的ROW_NUMBER over (order by some_col) -此ROW_NUMBER列自动排序的结果ROW_NUMBER over (order by some_col desc) -结果再次由反映新方向的ROW_NUMBER列自动排序。为什么它会这样?在使用order by时是否存在隐式ROW_NUMBER?
如果这是特定于供应商的,我正在MSSQL2014上进行测试。
发布于 2020-09-17 04:42:23
window函数中的ORDER子句仅控制窗口函数所考虑的行的顺序。它不能保证最终的结果集顺序。
注意事项:OVER子句中的ORDER子句仅控制分区中的行将被window函数使用的顺序。它不控制最终结果集的顺序。如果查询本身没有ORDER子句,则不能保证行的顺序。您可能会注意到,您的查询可能是按照最后指定的OVER子句的顺序返回的--这是由于SQL Server中当前实现的方式所致。如果Microsoft的Server团队更改了它的工作方式,它可能不再以当前正在观察的方式排序您的结果。如果结果集需要特定的订单,则必须针对查询本身提供order子句。
https://stackoverflow.com/questions/63931328
复制相似问题