MySQL 将总金额与支出、收入、储蓄(3 个不同的表格)中的所有金额进行比较,以每月的百分比表示

标签 mysql select union

我正在尝试创建一个查询,该查询允许我获得每个月比较支出、收入和储蓄的百分比值。我正在使用 MySQL 数据库。

表和查询示例: http://sqlfiddle.com/#!9/78b360/1

到目前为止,我能够从每个表中获取每月的总和:

SELECT *
FROM(
SELECT sum(amount) AS Total, month(date) AS Month FROM expenses
UNION ALL
SELECT sum(amount), month(date) FROM income
UNION ALL
SELECT sum(amount), month(date) FROM savings
GROUP BY month(date)) as grand_total

结果:

|   Total | Month |
|---------|-------|
| 1323232 |     9 |
|  300101 |     9 |
|   20000 |     9 |
|       1 |    10 |

如果我只看第 9 个月,我想要实现的是这样的:

|   Total | Month | Percent
|---------|-------|--------
| 1323232 |     9 |     81%
|  300101 |     9 |     18%
|   20000 |     9 |      1%

你能帮帮我吗?我在 stackoverflow 和其他网站上查看了很多答案,但找不到我真正需要的东西。非常感谢您的帮助。谢谢。

最佳答案

您当前查询的问题是您没有在 expensesincome 表中按月汇总,仅针对 savings 表.最后的 GROUP BY 适用于所有内容。

我认为您在这里需要做的是首先按月对三个表中的每一个进行汇总,将这些结果合并在一起,然后按月进行第二次汇总以获得每个月的总计。

SELECT
    month,
    SUM(total) AS month_total
FROM
(
    SELECT MONTH(date) AS month, SUM(amount) AS total
    FROM expenses
    GROUP BY MONTH(date)
    UNION ALL
    SELECT MONTH(date), SUM(amount)
    FROM income
    GROUP BY MONTH(date)
    UNION ALL
    SELECT MONTH(date), SUM(amount)
    FROM savings
    GROUP BY MONTH(date)
) t
-- WHERE month = 9         -- or whichever months you want to see
GROUP BY
    month
ORDER BY
    month

关于MySQL 将总金额与支出、收入、储蓄(3 个不同的表格)中的所有金额进行比较,以每月的百分比表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46660021/

相关文章:

javascript - 为什么 onclick Javascript 不适用于多个下拉菜单?

Mysql触发器错误

sqlite - 通过聚合联合多个表和组(SQlite)

php - create_date < NOW 从 1 到 40 秒

MySQL触发整型变量

mysql - 合并两个不同表同一列的 mysql count(*)

JQuery选择字段结果组合,显示某个类或id?

MySQL 如果存在则从表中抓取,否则使用不同的表

MySQL - 即使计数为零,也将结果与列表匹配

php - 如何检查 mysqli_query 是否删除了任何行