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

PostgreSQL如何获取GROUP BY子句未包含的列:按配送方式取最高价配送详情

PostgreSQL查询每个配送方式最高价格完整明细解决方案

方法1:使用窗口函数(推荐)

PostgreSQL 支持窗口函数,可以直接对每个配送方式分组内的记录按价格降序排序后取首位,既可以拿到完整的shipping_details字段,也可以关联获取配送方式的其他信息:

WITH ranked_shipping AS (
    SELECT 
        sd.*,
        sm.name AS shipping_method_name,
        sm.abbrev AS shipping_method_abbrev,
        -- 按配送方式分组,组内按价格降序排序
        ROW_NUMBER() OVER (PARTITION BY sd.shipping_method_id ORDER BY sd.price DESC) AS rn
    FROM shipping_details sd
    LEFT JOIN shipping_method sm ON sm.id = sd.shipping_method_id
)
-- 取每个分组排序第一的记录,即为最高价明细
SELECT id, shipping_method_id, estimated_time_min, estimated_time_max, price, shipping_method_name, shipping_method_abbrev
FROM ranked_shipping
WHERE rn = 1;

如果同一个配送方式存在多条价格相同的最高记录,你需要全部返回时,把ROW_NUMBER()替换为RANK()即可。

方法2:使用关联子查询

如果不想使用CTE和窗口函数,也可以用子查询先查出每个配送方式的最高价格,再关联回原表匹配完整记录:

SELECT 
    sd.*,
    sm.name AS shipping_method_name,
    sm.abbrev AS shipping_method_abbrev
FROM shipping_details sd
LEFT JOIN shipping_method sm ON sm.id = sd.shipping_method_id
WHERE (sd.shipping_method_id, sd.price) IN (
    SELECT shipping_method_id, MAX(price)
    FROM shipping_details
    GROUP BY shipping_method_id
);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 19:39:03