如何在SQL Developer中获取正确的订单平均总金额?
订单平均总金额的正确计算方法
你现有SQL的问题
- 第一条SQL:按
priceeach分组,计算的是相同单价的明细项总金额的平均值,完全偏离了订单维度的统计逻辑,结果自然不对。 - 第二条SQL:按
CUSTOMERNUMBER分组后嵌套avg(AVG(...)),实际计算的是「每个客户的平均订单金额」的平均值,是客户层面的统计,而非所有订单的总金额平均值。
正确的SQL写法
要计算订单平均总金额,需先统计每个订单的总金额,再对所有订单的总金额求平均:
-- 基础版:直接基于订单明细计算每个订单的总金额,再求平均 SELECT AVG(order_total) AS avg_order_total FROM ( SELECT SUM(od.QUANTITYORDERED * od.PRICEEACH) AS order_total FROM ORDERDETAILS od GROUP BY od.ORDERNUMBER ) order_totals;
如果需要确保统计的是已存在于ORDERS表的有效订单(排除可能的孤立明细),可以关联ORDERS表:
-- 关联订单表的版本 SELECT AVG(order_total) AS avg_order_total FROM ( SELECT SUM(od.QUANTITYORDERED * od.PRICEEACH) AS order_total FROM ORDERDETAILS od JOIN ORDERS o ON od.ORDERNUMBER = o.ORDERNUMBER GROUP BY od.ORDERNUMBER ) order_totals;
逻辑说明
- 子查询中按
ORDERNUMBER分组,计算每个订单的总金额(所有明细项的数量×单价之和)。 - 外层查询对所有订单的总金额求平均值,得到的就是真正的「订单平均总金额」。
内容的提问来源于stack exchange,提问作者SGG
相关产品推荐
相关产品推荐

