The*_*ies 3 t-sql sql-server sql-order-by partition
我注意到当我使用下面的分区时
SELECT
ROW_NUMBER() OVER(PARTITION BY categoryid
ORDER BY unitprice, productid) AS rownum,
categoryid, productid, productname, unitprice
FROM Production.Products;
Run Code Online (Sandbox Code Playgroud)
结果集在适当的分区和顺序中相应地返回给我.
这是否意味着我不必在最后提供Order BY子句以绝对保证我想要的订单?
谢谢
Dam*_*ver 10
没有.
要保证结果顺序,必须使用ORDER BY适用于最外层查询的结果顺序.其他任何事都只是巧合.
SELECT
ROW_NUMBER() OVER(PARTITION BY categoryid
ORDER BY unitprice, productid) AS rownum,
categoryid, productid, productname, unitprice
FROM Production.Products
ORDER BY categoryid,unitprice,productid;
Run Code Online (Sandbox Code Playgroud)
ORDER BY 有两个角色:
TOP在OVER()分区函数中使用,比如说或在分区函数中使用时都是如此.它不需要进行排序,它只是说"如果我们认为结果集中的行按特定顺序发生,这个定义才有意义 - 这是我想要使用的那个"ORDER BY是作为特定查询一部分的最外层语句的子句时,这是正确的- 不在子查询,CTE,OVER()paritition函数等中.偶尔你会遇到它同时在两种意义上使用 - 当最外面的语句包含a TOP或OFFSET/时FETCH,它就用于两种目的.
| 归档时间: |
|
| 查看次数: |
17346 次 |
| 最近记录: |