Mysql 显示来自不同不相关表的两个和
我有两张桌子。一个包含费用,另一个包含收益。 我的学费: 我的收入: 从这两个表中,我想获得数据:Mysql 显示来自不同不相关表的两个和,mysql,sql,Mysql,Sql,我有两张桌子。一个包含费用,另一个包含收益。 我的学费: 我的收入: 从这两个表中,我想获得数据: 按月份和年份对期间进行分组 该期间的费用金额 该期间每天的平均费用 本期收益金额 我正在使用以下查询: 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)),
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
此请求成功地为我提供了期限、成本和收益。但所显示的收入数额是不正确的。这一数字远高于预期,每月不得超过10000人
联接后聚合可能不准确,因为行重复或丢失。我建议使用
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;
请注意,我按更改了
的顺序,因此结果是按时间顺序排列的。这里的大多数人希望示例表数据和预期结果是格式化文本,而不是图像。此外,请尝试更清楚地说明“不正确”。它大一点吗?更小这些信息可以指向错误,这对我来说是非常不寻常的语法。不幸的是,我自己没有发现你答案中的错误。执行结果: