gpt4 book ai didi

sql - postgresql 中的 Row_number()

转载 作者:行者123 更新时间:2023-11-29 11:59:32 25 4
gpt4 key购买 nike

我有一个问题:

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 ....

这意味着它将接受从查询中给出的任何顺序,并简单地向其添加数字。

最佳答案

Postgres 允许语法:

select row_number() over (), . . .

但是,这不一定会按照外部 order by 指定的顺序返回行号。我认为 Postgres 在 order by 之前计算行号。

您可能会想使用:

select row_number() over (), . . .
from (select . . .
from . . .
order by . . .
) t;

而且,这似乎可以满足您的需求(例如,一台单处理器机器,它只是做了正确的事情)。但是,这不能保证有效。子查询中的排序不适用于外部查询(尽管这可能只在多处理器机器上可见)。

我的建议?只需重复 order by 两次(使用表达式或别名)。这保证有效。而且,您可能会对优化器只需要对数据进行一次排序感到惊讶。

关于sql - postgresql 中的 Row_number(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35129480/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com