显示来自不同不相关表的两个总和

时间:2021-04-14 11:40:43

标签: mysql sql

我有两张桌子。一个包含费用,另一个包含收益。 我的成本: enter image description here

我的收入:

enter image description here

我想从这两个表中获取数据:

  1. 按月和年对期间进行分组
  2. 当期费用金额
  3. 该期间每天的平均费用
  4. 当期收入金额

我正在使用以下查询:

SELECT DATE_FORMAT(my_costs.DATE, "%M-%Y") AS Period, SUM(my_costs.sum) AS Costs,
ROUND(SUM(my_costs.sum)/DAY(LAST_DAY(my_costs.date)), 0) AS Average,

SUM(my_earnings.sum)

FROM my_costs

LEFT JOIN my_earnings ON DATE_FORMAT(my_costs.DATE, "%M-%Y") = DATE_FORMAT(my_earnings.date, "%M-%Y")

GROUP BY DATE_FORMAT(my_costs.DATE, "%M-%Y")
ORDER BY Period DESC

此请求成功地为我提供了期间、成本和收益。但显示的收入金额不正确。数字远高于预期,每月应该不超过10,000

enter image description here

1 个答案:

答案 0 :(得分:0)

连接后的聚合可能不准确,因为行重复或丢失。我建议使用 union all 然后聚合:

SELECT DATE_FORMAT(ce.DATE, '%M-%M') AS Period,
       SUM(ce.costs) AS Costs, SUM(ce.Expenses) as expenses,
        ROUND(SUM(ce.sum)/DAY(LAST_DAY(ce.date)), 0) AS daily_Average
FROM ((SELECT date, sum as costs, 0 as expenses
       FROM my_costs
      ) UNION ALL
      (SELECT date, 0, sum
       FROM my_earnings
      )
     ) ce
GROUP BY period
ORDER BY MIN(ce.DATE) DESC;

请注意,我更改了 ORDER BY,因此结果按时间顺序排列。

相关问题