如何统计Credit状态客户数量及对应订单金额总和?
修正后的SQL查询方案
问题核心
你的查询未正确限定Orders表的Status条件,导致累加了所有订单的金额。需要确保仅关联状态为Credit的订单,同时准确统计对应客户数量(按预期结果,应为统计有Credit订单的独立客户数,而非订单数)。
修正后的查询语句
方式1:关联后直接过滤状态
SELECT COUNT(DISTINCT o.`Customer Name`) AS NoOfCreditor, SUM(od.Amount) AS AmountTotal FROM Orders o JOIN OrderDetails od ON o.OrderID = od.OrderID WHERE o.Status = 'Credit';
方式2:子查询预过滤Credit订单
SELECT COUNT(DISTINCT o.`Customer Name`) AS NoOfCreditor, SUM(od.Amount) AS AmountTotal FROM OrderDetails od JOIN ( SELECT OrderID, `Customer Name` FROM Orders WHERE Status = 'Credit' ) o ON od.OrderID = o.OrderID;
关键说明
COUNT(DISTINCT o.Customer Name):确保同一客户即使有多笔Credit订单,也仅被统计一次,匹配你预期的NoOfCreditor=2。WHERE o.Status = 'Credit'/子查询过滤:仅关联状态为Credit的订单,保证SUM(od.Amount)只计算这类订单的金额总和,得到预期的45.00。
内容的提问来源于stack exchange,提问作者User_K47
相关产品推荐
相关产品推荐

