gpt4 book ai didi

sql - SUM 干扰 COUNT

转载 作者:行者123 更新时间:2023-12-04 05:24:17 30 4
gpt4 key购买 nike

使用这个查询,我得到了我需要的每个客户下的订单数量的结果。但是,当我在 SELECT 字段中使用 SUM(OrderLine.ActualPrice) 并使用内部联接将 Order 表链接到包含价格的 OrderLine 表时。 COUNT 结果是有偏差的,因为 OrderLine 表包含同一个 Order 的多个 OrderNo,因为一个订单可以包含多个产品。

我如何将 COUNT 保持为我使用此查询获得的结果,同时为他们订单的总购买金额输入 SUM 查询?

SELECT C.custno, 
companyname,
Count(customerorder.orderno)AS 'Total Orders',
FROM customer C
INNER JOIN customerorder
ON customerorder.custno = C.custno
GROUP BY C.custno,
companyname

修改后的查询结果不正确
SELECT C.custno, 
companyname,
Count(customerorder.orderno)AS 'Total Orders',
Sum(orderline.actualprice)
FROM customer C
INNER JOIN customerorder
ON customerorder.custno = C.custno
INNER JOIN orderline
ON customerorder.orderno = orderline.orderno
GROUP BY C.custno,
companyname

这是我尝试使用并收到倾斜的 COUNT 结果的查询。

最佳答案

您有两个基本选项。

使用 DISTINCT

SELECT C.custno, 
companyname,
Count(DISTINCT customerorder.orderno)AS 'Total Orders',
Sum(orderline.actualprice)
FROM customer C
INNER JOIN customerorder
ON customerorder.custno = C.custno
INNER JOIN orderline
ON customerorder.orderno = orderline.orderno
GROUP BY C.custno,
companyname

注意:

在对另一个问题的评论中,您说这仍然会导致结果。这似乎暗示着同样的 orderno可以出现在多个 customerorder记录。那是正确的吗?

使用子查询使连接成为 1:1 而不是 1:many
SELECT C.custno, 
companyname,
Count(customerorder.orderno)AS 'Total Orders',
Sum(orderline.actualprice)
FROM customer C
INNER JOIN customerorder
ON customerorder.custno = C.custno
INNER JOIN (SELECT orderno, SUM(actualprice) AS actualprice
FROM orderline
GROUP BY orderno)
ON customerorder.orderno = orderline.orderno
GROUP BY C.custno,
companyname

关于sql - SUM 干扰 COUNT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13377988/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com