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

如何按订单号分组,先取每个运单号的最大成本再求和?

搞定这个需求的正确姿势

咱先把需求拆明白:第一步得先给每个运单号(TNo)找出对应的最高成本(cost),第二步再把这些最高值按订单号(OrderNo)加起来。之前的代码出错大概率是没做第一步,直接把同个TNo里的所有cost都加进去了,结果自然不对。

方法一:子查询先拿每个TNo的最大成本

这是最直白的写法,先通过子查询把每个运单号的最高成本捞出来,再基于这个结果分组求和:

SELECT 
    OrderNo,
    SUM(max_cost) AS Sum
FROM (
    -- 先搞定每个TNo的最大cost,同时关联对应的OrderNo
    SELECT 
        TNo,
        OrderNo,
        MAX(cost) AS max_cost
    FROM your_table_name -- 记得把这里换成你的实际表名
    GROUP BY TNo, OrderNo
) AS temp_table
GROUP BY OrderNo;

方法二:用窗口函数(适合新版本数据库)

如果你的数据库支持窗口函数(比如MySQL 8.0+、PostgreSQL、SQL Server这些),可以用更简洁的写法,先给每一行标记它所属TNo的最大成本,再去重后求和:

SELECT 
    OrderNo,
    SUM(max_cost) AS Sum
FROM (
    -- 用窗口函数标记每个TNo的最大成本,再去重避免重复计算
    SELECT DISTINCT
        TNo,
        OrderNo,
        MAX(cost) OVER (PARTITION BY TNo) AS max_cost
    FROM your_table_name
) AS temp_table
GROUP BY OrderNo;

咱来验证下结果

用你给的测试数据跑一遍:

  • 子查询会先输出这样的中间结果:
    TNoOrderNomax_cost
    1125
    2126
    3153
    4153
  • 再按OrderNo分组求和,就正好得到你想要的:
    OrderNoSum
    1211
    156

要是之前的错误代码是直接GROUP BY OrderNo, TNo后把cost全加了,那OrderNo12的总和会是5+4+6+3=18,肯定和期望的11对不上——这就是最容易踩的坑,别跳过第一步取最大值的操作哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:54:44