Mysql 如何将两个表的值相加并按日期分组

Mysql 如何将两个表的值相加并按日期分组,mysql,Mysql,我正在构建一个交易系统,在这个系统中,用户需要知道特定用户(uid)的运行账户余额,包括他们从交易中赚了多少钱(结果表),以及他们从账户中存入或取出了多少钱(调整表) 以下是sqlfiddle和表格: 如何获得uid(1)的以下结果 其中RunningBalance是特定用户(uid)的当前帐户余额 根据@Gabriel的回答,我得出了类似的结论,但它给了我空余额和重复记录 SELECT SUM(ResultsTotal), SUM(TaxesTotal), SUM(AdjustmentsTot

我正在构建一个交易系统,在这个系统中,用户需要知道特定用户(uid)的运行账户余额,包括他们从交易中赚了多少钱(结果表),以及他们从账户中存入或取出了多少钱(调整表)

以下是sqlfiddle和表格:

如何获得uid(1)的以下结果

其中RunningBalance是特定用户(uid)的当前帐户余额

根据@Gabriel的回答,我得出了类似的结论,但它给了我空余额和重复记录

SELECT SUM(ResultsTotal), SUM(TaxesTotal), SUM(AdjustmentsTotal), @runningtotal:= @runningtotal+SUM(ResultsTotal)+SUM(TaxesTotal)+SUM(AdjustmentsTotal) as Balance, date
FROM (
  SELECT 0 AS ResultsTotal, 0 AS TaxesTotal, adjustments.amount AS AdjustmentsTotal, adjustments.date
  FROM adjustments LEFT JOIN results ON (results.uid=adjustments.uid) WHERE adjustments.uid='1'
  UNION ALL
  SELECT results.amount AS ResultsTotal, taxes AS TaxesTotal, 0 as AdjustmentsTotal, results.date
  FROM results LEFT JOIN adjustments ON (results.uid=adjustments.uid) WHERE results.uid='1'
) unionTable
GROUP BY DATE ORDER BY date

对于您所要求的内容,您希望合并然后对两个表的结果进行分组,这将给出您想要的结果。但是,我建议在MySQL之外计算运行平衡,因为这会增加查询的复杂性

奇怪的事情可能会开始发生,例如,如果有人已经将@runningBalance变量定义为查询范围的一部分

SELECT aggregateTable.*, @runningBalance := ifNULL(@runningBalance, 0) + TOTAL
FROM (
  SELECT SUM(ResultsTotal), SUM(TaxesTotal), SUM(AdjustmentsTotal)
   , SUM(ResultsTotal) + SUM(TaxesTotal) + SUM(AdjustmentsTotal) as TOTAL
   , date
  FROM (
    SELECT 0 AS ResultsTotal, 0 AS TaxesTotal, amount AS AdjustmentsTotal, date 
    FROM adjustments
    UNION ALL
    SELECT amount AS ResultsTotal, taxes AS TaxesTotal, 0 as AdjustmentsTotal, date
    FROM results
  ) unionTable
  GROUP BY date
) aggregateTable

StackOverflow不是免费的编码服务。你应该会的。请更新您的问题,以显示您已在某个应用程序中尝试过的内容。有关更多信息,请参阅,并选择:)完成。谢谢@barmar您需要将
@runningtotal
初始化为0,或者使用回答中的
IFNULL
调用。仍然缺少运行平衡。@Thiago您没有提到包含运行平衡的模式。我无法从您提供的数据中找到计算运行平衡的明确方法。例如,“2019-08-19”的流动余额为133。如果我加上其他3列,它不等于133。然而,我向您展示的是如何在两个表之间有效地聚合数据,并将其他表相加。有了我的回答,我相信你可以找到新问题的解决办法。@GirishPandey,流动余额是所有总额的总和,就像银行对账单一样,你可以看到账户中所有的资金进出。谢谢@GabrielGates!效果很好。
SELECT SUM(ResultsTotal), SUM(TaxesTotal), SUM(AdjustmentsTotal), @runningtotal:= @runningtotal+SUM(ResultsTotal)+SUM(TaxesTotal)+SUM(AdjustmentsTotal) as Balance, date
FROM (
  SELECT 0 AS ResultsTotal, 0 AS TaxesTotal, adjustments.amount AS AdjustmentsTotal, adjustments.date
  FROM adjustments LEFT JOIN results ON (results.uid=adjustments.uid) WHERE adjustments.uid='1'
  UNION ALL
  SELECT results.amount AS ResultsTotal, taxes AS TaxesTotal, 0 as AdjustmentsTotal, results.date
  FROM results LEFT JOIN adjustments ON (results.uid=adjustments.uid) WHERE results.uid='1'
) unionTable
GROUP BY DATE ORDER BY date
SELECT aggregateTable.*, @runningBalance := ifNULL(@runningBalance, 0) + TOTAL
FROM (
  SELECT SUM(ResultsTotal), SUM(TaxesTotal), SUM(AdjustmentsTotal)
   , SUM(ResultsTotal) + SUM(TaxesTotal) + SUM(AdjustmentsTotal) as TOTAL
   , date
  FROM (
    SELECT 0 AS ResultsTotal, 0 AS TaxesTotal, amount AS AdjustmentsTotal, date 
    FROM adjustments
    UNION ALL
    SELECT amount AS ResultsTotal, taxes AS TaxesTotal, 0 as AdjustmentsTotal, date
    FROM results
  ) unionTable
  GROUP BY date
) aggregateTable