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

如何用子查询计算各订单总金额?需解决重复输出订单ID问题

我来帮你搞定这个问题!你的核心需求是用子查询(不能用JOIN)计算每个订单的总金额,同时解决重复输出order_id的问题,对吧?

先说说你原来SQL的问题:你把order_details和products直接放在FROM子句里,本质是生成了笛卡尔积,再用IN条件过滤,这会让每个订单明细都单独输出一条记录,所以同一个order_id会重复出现,而且没有对金额求和,得到的是单条明细的金额,不是订单总金额。

下面是完全符合要求的两种解决方案,全程用子查询实现,没有使用任何JOIN,还能确保每个order_id只输出一次:

方案一:从orders表出发,用关联子查询计算总金额

SELECT 
    order_id,
    -- 关联子查询:针对当前订单,计算所有明细的金额总和
    (SELECT SUM(od.quantity * (SELECT price FROM products WHERE product_id = od.product_id))
     FROM order_details od
     WHERE od.order_id = o.order_id) AS order_total
FROM orders o;

这个写法的逻辑是:主查询遍历每个订单,子查询里找到该订单对应的所有order_details记录,对每条明细用子查询获取对应商品的价格,计算quantity*price后求和,最终每个订单只返回一条总金额记录。

方案二:从order_details表分组,结合子查询求和

SELECT 
    od.order_id,
    SUM(od.quantity * (SELECT p.price FROM products p WHERE p.product_id = od.product_id)) AS order_total
FROM order_details od
GROUP BY od.order_id;

这个写法更直接:通过GROUP BY od.order_id把同一个订单的所有明细分组,然后对每组内的明细,用子查询拿到对应商品的价格,计算单条明细金额后求和,这样每个order_id只会出现一次,直接得到该订单的总金额。

这两种写法都能完美解决你的问题,确保输出的是每个订单ID + 对应的总金额,完全满足「必须用子查询、不能用连接」的要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:52:04