mysql - 连接两个表并使组和总和正确

标签 mysql sql-server join group-by cross-join

我已经尝试解决这个问题几个小时了,非常感谢您的帮助!

所以我有两个表,transactions 和 transactions_rebuy

我的 SELECT 目标是连接/组合这些表并按日期对它们进行分组。

现在我有这样的声明:

SELECT tr.SoldDate, SUM(tr.TotalAmount) as SumByReceipt,
COUNT(DISTINCT(tr.`ForsNr`)) as TotalCustomers, rebuy.RebuySum
FROM transactions tr   
CROSS JOIN (
SELECT SUM(TotalAmount) as RebuySum
    FROM transactions_rebuy
    WHERE SoldDate BETWEEN '2016-10-22' AND '2016-10-27'
    ) as rebuy
WHERE tr.SoldDate BETWEEN '2016-10-22' AND '2016-10-27' 
GROUP by tr.SoldDate
ORDER by tr.SoldDate DESC

这给了我以下结果:

SaldDatum SumByReceipt TotalCustomers RebuySum

2016-10-27 54855.8001       99        10435.9997
2016-10-26 41749.8009       76        10435.9997
2016-10-25 46626.8001       79        10435.9997
2016-10-24 38678.8017       76        10435.9997
2016-10-22 30351.9997       48        10435.9997

问题在于“RebuySum”列是对上述所有日期的总和进行分组的。作为“SumByReceipt”,我希望它按日期分组,而不是每行的总和。

我来回尝试了分组和求和,并让它工作,但后来它弄乱了“SumByReceipt”列。

非常感谢对此的想法。

最佳答案

按日期对子查询进行分组,然后按日期连接它们。

SELECT tr.SoldDate, SUM(tr.TotalAmount) as SumByReceipt,
        COUNT(DISTINCT(tr.`ForsNr`)) as TotalCustomers, IFNULL(rebuy.RebuySum, 0) RebuySum
FROM transactions tr   
LEFT JOIN (
    SELECT SoldDate, SUM(TotalAmount) as RebuySum
    FROM transactions_rebuy
    WHERE SoldDate BETWEEN '2016-10-22' AND '2016-10-27'
    GROUP BY SoldDate
    ) as rebuy
ON tr.SoldDate = rebuy.SoldDate
WHERE tr.SoldDate BETWEEN '2016-10-22' AND '2016-10-27' 
GROUP by tr.SoldDate
ORDER by tr.SoldDate DESC

关于mysql - 连接两个表并使组和总和正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40324973/

相关文章:

ruby-on-rails - 两个表之间的连接在 Activerecord 中失败,出现未初始化的常量错误

mysql - 在 MySQL 中连接两个或多个 View

sql - 如果 SQL Server 单元格中有字母,则删除行

javascript - 如何在本地运行node.js应用程序进行开发

php - 您的 SQL 语法有错误;检查与您的 MariaDB 服务器相对应的手册, '' 文章的 WHERE (`title` LI

php - 从数据库检索数据出现错误

sql-server - 如何将 int 转换为带有前导零的 char?

linux - 合并两个文件添加列的值

php - AsyncTask Android 中的 Http 请求

php - 如何实现嵌套评论系统?