同一订单多行显示相同总金额,如何按唯一ORDER ID统计?
解决按唯一订单ID统计餐厅总金额的问题
问题核心是你的数据集里同一订单对应多行记录,原查询直接按Restaurant_ID分组,会把同一订单的Total_with_VAT重复累加,导致统计结果偏大。要修正这个问题,必须先按唯一订单ID去重,再按餐厅汇总。
修改后的SQL查询
假设你的表中唯一订单ID字段名为Order_ID(如果实际字段名不同,替换成对应名称即可):
SELECT Restaurant_ID, ROUND(SUM(Order_Total), 2) AS Total_With_VAT FROM ( -- 先获取每个唯一订单的总金额(同一订单的多行记录取一次值即可) SELECT Restaurant_ID, Order_ID, -- 同一订单的Total__with_VAT_值应一致,用MAX避免重复计算 MAX(Total__with_VAT_) AS Order_Total FROM rest.totals GROUP BY Restaurant_ID, Order_ID ) AS order_level_totals GROUP BY Restaurant_ID ORDER BY Total_With_VAT DESC;
原查询无效的原因
- 原查询直接按
Restaurant_ID分组,同一订单的多行记录会多次计入SUM(Total__with_VAT_),相当于把单个订单的金额重复累加了N次(N为该订单的行数)。 - 你尝试的子查询依然是按
Restaurant_ID分组,未处理订单维度的重复,所以结果和原查询完全一致。
补充场景说明
如果Total__with_VAT_是订单每行的分项金额(而非整个订单的总金额),子查询里需用SUM计算单个订单的总金额,再在外层按餐厅汇总:
SELECT Restaurant_ID, ROUND(SUM(Order_Total), 2) AS Total_With_VAT FROM ( SELECT Restaurant_ID, Order_ID, SUM(Total__with_VAT_) AS Order_Total FROM rest.totals GROUP BY Restaurant_ID, Order_ID ) AS order_level_totals GROUP BY Restaurant_ID ORDER BY Total_With_VAT DESC;
内容的提问来源于stack exchange,提问作者Ron
相关产品推荐
相关产品推荐

