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 次 |
最近记录: |