记录的排列顺序——两个ORDER BY

因为使用窗口函数时必须要在OVER 子句中使用ORDER BY,所以可能有朋友乍一看会觉得结果中的记录不会按照该ORDER BY 指定的顺序进行排序。

其实OVER 子句中的ORDER BY 只是用来决定窗口函数按照什么样的顺序进行计算的,对结果的排列顺序并没有影响

真正需要对结果排序,需要在SELECT语句的最后,使用ORDER BY子句进行指定。

这样在一条SELECT 语句中使用两次ORDER BY。

SELECT product_name, product_type, sale_price,RANK () OVER (ORDER BY sale_price) AS ranking

FROM Product
ORDER BY ranking;

尽管这两个ORDER BY 看上去是相同的,但其实它们的功能却完全不同。

将聚合函数作为窗口函数使用时,会以当前记录为基准来决定汇总对象的记录。

PS:有些DBMS 也可以按照窗口函数的ORDER BY 子句所指定的顺序对结果进行排序。

原文地址:https://www.cnblogs.com/philipchan/p/14338797.html