postgresql中的ORDER BY in OVER()窗口函数是什么意思?
我试图理解postgresql中的ORDER BY in OVER()窗口函数是什么意思?,postgresql,sql-order-by,window-functions,Postgresql,Sql Order By,Window Functions,我试图理解OVER()窗口函数中的orderby子句与通用SQL中的orderby子句有何不同 我正在解决以下问题: 生成成员(包括来宾)的单调递增编号列表, 按其加入日期订购。请记住,不能保证成员ID是连续的。 以下查询是可接受的解决方案之一: 从cd.members中选择COUNT(*)(按joindate排序)、firstname、姓氏; 根据我的理解,因为我们在OVER()函数中没有提供partitionby子句,所以cd.members表中的所有行构成一个大分区(我们称之为X)。当
OVER()
窗口函数中的orderby
子句与通用SQL中的orderby
子句有何不同
我正在解决以下问题:
生成成员(包括来宾)的单调递增编号列表,
按其加入日期订购。请记住,不能保证成员ID是连续的。
以下查询是可接受的解决方案之一:
从cd.members中选择COUNT(*)(按joindate排序)、firstname、姓氏;
根据我的理解,因为我们在OVER()
函数中没有提供partitionby
子句,所以cd.members
表中的所有行构成一个大分区(我们称之为X)。当窗口函数运行时,它应该按joindate对X进行排序,然后X上的COUNT(*)
将返回X中的行数,这正好是cd.members中的行数
但这种理解是错误的。上述问题的“答案和讨论”说明:
因为我们为窗口函数定义了一个顺序,所以对于任何给定的行,窗口都是:数据集的开始->当前行
各国:
您还可以使用order by in OVER控制窗口函数处理行的顺序。(窗口排序依据甚至不必与行的输出顺序匹配。)
我无法理解的是,为什么在OVER()中按
排序
在当前行停止?你能详细说明一下这是怎么回事吗
感谢您通读。除了文档(与您已链接的页面相同)已经说明的内容之外,我不知道要添加什么:
默认情况下,如果提供了ORDER By,则框架由所有
从分区开始到当前行的行,加上
根据指定的与当前行相等的任何后续行
按条款排序
我现在不知道这是否是SQL标准所要求的,但它看起来确实合理。如果您希望订单没有明显的效果,那么为什么要指定订单