【发布时间】:2016-05-09 20:12:36
【问题描述】:
我有一个问题:
select .....
from....
order by ....
我想在这个查询中添加行号。
当我读到row_number() 时,它说语法是:
row_number() OVER(ORDER BY ...)
意思是我必须做的:
select row_number() OVER(ORDER BY ...) , .....
from....
order by ....
这意味着我必须写两次相同的ORDER BY 语句。
有没有办法做类似的事情:
select row_number() , .....
from....
order by ....
意味着它将采用查询中给出的任何顺序,并简单地添加数字。
【问题讨论】:
-
不,这是不可能的。窗口函数中使用的排序顺序不一定要与整体排序顺序相同
-
@a_horse_with_no_name 我这里没有postgresql,但他可以通过对生成的
row_number()进行排序来尝试(如果它像SQL Server,ORDER BY 阶段是在SELECT 阶段之后,这样他就可以给生成的row_number()起一个别名,然后对其进行排序) -
@xanatos:啊,对了。
-
你的意思是从查询中删除订单,作为
select row_number() OVER(ORDER BY ...) as rownum,然后order by rownum? -
@java 是的,完全一样。遗憾的是 SQL Fiddle 现在无法正常工作,所以我无法对其进行测试。
标签: sql postgresql window-functions