如果您希望重用窗口定义,可以使用以下命令单独定义它
window w1 as (order by..)
那么
row_number() over (..)
成为
row_number()over w1
您可以从任何其他窗口函数引用相同的窗口定义。您还可以基于已有的窗口定义创建新的窗口定义。
demo at db<>fiddle
select row_number()over w1 as index
, sum(id)over w1 as sum1
, sum(id)over(w1 rows between 1 preceding
and 0 following)as sum2
, id
, title
, age(created_at)
, priority
, user_id
from post
window w1 as (order by priority DESC NULLS LAST
, created_at DESC)
--order by index
--order by 1
order by row_number()over w1
指数
|
sum1
|
sum2
|
身份证件
|
标题
|
年龄
|
优先
|
user_id
|
1.
|
1.
|
1.
|
1.
|
标题1
|
23:54:27.360735
|
4.
|
2.
|
2.
|
3.
|
3.
|
2.
|
标题2
|
-00:05:32.639265
|
3.
|
3.
|
3.
|
6.
|
5.
|
3.
|
标题3
|
-1天-00:05:32.639265
|
2.
|
4.
|
4.
|
10
|
7.
|
4.
|
标题4
|
-2天-00:05:32.639265
|
1.
|
1.
|
至于
order by
,在您的示例中,按您使用它生成的行号排序就足够了
订购方式
您可以通过别名或序号位置引用它。
Quoting the doc
:
每个表达式可以是输出列(SELECT列表项)的名称或序号,也可以是由输入列值形成的任意表达式。
序号是指输出列的序号(从左到右)位置。此功能允许根据没有唯一名称的列定义排序。这从来不是绝对必要的,因为总是可以使用AS子句为输出列分配名称。
也可以在ORDER BY子句中使用任意表达式,包括未出现在SELECT输出列表中的列。