gpt4 book ai didi

oracle - 在 "having"子句中从 Postgres 中的 Oracle 转换 rownum

转载 作者:行者123 更新时间:2023-11-29 13:27:04 27 4
gpt4 key购买 nike

我需要将查询从 Oracle SQL 转换为 Postgres。

select count(*) from  table1 group by column1 having max(rownum) = 4

如果我用“row_number() over()”替换“rownum”,我会收到一条错误消息:“HAVING 中不允许使用窗口函数”。你能帮我在 Postgres 中获得与在 Oracle 中相同的结果吗?

最佳答案

下面的查询将执行您的 Oracle 查询正在执行的操作。

select count(*) from 
(select column1, row_number() over () as x from table1) as t
group by column1 having max(t.x) = 6;

但是

除非您指定 order by 子句,否则 oracle 和 postgres 都不能保证读取记录的顺序。因此,多次运行查询将不一致,具体取决于数据库决定如何处理查询。当然,在 postgres 中,任何更新都会改变底层的行顺序。

在下面的示例中,我有一个额外的 seq 列,用于提供一致的排序。

CREATE TABLE table1 (column1 int, seq int);
insert into table1 values (0,1),(0,2),(0,3),(1,4),(0,5),(1,6);

还有一个修改后的查询,它强制顺序保持一致:

select count(*) from 
(select column1, row_number() over (order by seq) as x from table1) as t
group by column1 having max(t.x) = 6;

关于oracle - 在 "having"子句中从 Postgres 中的 Oracle 转换 rownum,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31827902/

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