Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
postgresql中的ORDER BY in OVER()窗口函数是什么意思?_Postgresql_Sql Order By_Window Functions - Fatal编程技术网

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标准所要求的,但它看起来确实合理。如果您希望订单没有明显的效果,那么为什么要指定订单