作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要将查询从 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/
我是一名优秀的程序员,十分优秀!