You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Oracle的DENSE_RANK FIRST KEEP查询转换为Postgres等效写法

Oracle DENSE_RANK FIRST 语法转PostgreSQL等效写法

原Oracle语句逻辑

语句作用为:对目标表数据按prop2字段降序排序,取排序优先级最高(即prop2值最大)的所有行,在这批行中计算最大id值,返回结果别名为prop1。
原Oracle代码如下:

SELECT MAX(id) KEEP (DENSE_RANK FIRST ORDER BY prop2 DESC) AS prop1 FROM table t;

PostgreSQL等效写法

写法1:窗口函数实现(完全等效,适配所有版本)

SELECT MAX(id) AS prop1
FROM (
    SELECT 
        id,
        DENSE_RANK() OVER (ORDER BY prop2 DESC) AS rnk
    FROM "table" t
) t
WHERE rnk = 1;

写法2:简化写法(PostgreSQL 13及以上版本支持,执行效率更高)

SELECT MAX(id) AS prop1
FROM (
    SELECT id
    FROM "table" t
    ORDER BY prop2 DESC
    FETCH FIRST 1 ROWS WITH TIES
) t;

注意事项

上述SQL中的"table"为示例表名,因table是SQL关键字,实际使用时请替换为你的业务表名,若表名本身不是关键字可省略双引号。

内容的提问来源于stack exchange,提问作者yed2393

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 19:45:04