![](/img/trans.png)
[英]MySQL comparing total sums to all sums in expenses, income, savings (3 different tables) as percentage per month
[英]get total amount of expenses per month in MySQL
我目前正在处理2张桌子,费用和收入。 为了使结构简单并可以看到它,这是小提琴: http ://sqlfiddle.com/#!9/ 256cd64/2
我需要从查询中获得的结果是本年度每个月的总金额,并尝试了以下操作:
select sum(e.amount) as expense, DATE_FORMAT(e.date,'%m') as month
from expenses e
where year(e.date) = 2019
group by month
我的问题是,只要他们没有返回0,那么我只需要花几个月的时间进行注册,就算他们没有注册也要花12个月。
目前,我正在处理费用表,但我想使用一个查询来返回每月费用和收入,这是我希望获得的最终输出的一个示例:
| Month | Expense| Incomes |
|---------|--------|---------|
| 01| 0 | 0 |
| 02| 3000 | 4000 |
| 03| 1500 | 5430 |
| 04| 2430 | 2000 |
| 05| 2430 | 1000 |
| 06| 2430 | 1340 |
| 07| 0 | 5500 |
| 08| 2430 | 2000 |
| 09| 1230 | 2000 |
| 10| 8730 | 2000 |
| 11| 2430 | 2000 |
| 12| 6540 | 2000 |
您需要生成月份值,然后使用left join
匹配费用:
select coalesce(sum(e.amount), 0) as expense, m.month
from (select '01' as month union all
select '02' as month union all
select '03' as month union all
select '04' as month union all
select '05' as month union all
select '06' as month union all
select '07' as month union all
select '08' as month union all
select '09' as month union all
select '10' as month union all
select '11' as month union all
select '12' as month
) m left join
expenses e
on year(e.date) = 2019 and
DATE_FORMAT(e.date,'%m') = m.month
group by m.month;
这是db <>小提琴。
至于income
,您应该问另一个问题。
您可以使用MONTH从日期列中获取月份值,然后使用GROUP BY来获取所需的输出,如下所示:
SELECT SUM(e.amount) AS expense,
MONTH(e.date) AS month
FROM expenses e
WHERE YEAR(e.date) = 2019
GROUP BY MONTH(e.date)
尝试将COALESCE(sum(e.amount),0) as expense
更改sum(e.amount) as expense
: COALESCE(sum(e.amount),0) as expense
COALESCE
函数返回第一个非NULL
值。
SELECT
t1.month,
COALESCE(t2.amount, 0) AS expenses,
COALESCE(t3.amount, 0) AS incomes
FROM
(
SELECT 1 AS month UNION ALL
SELECT 2 UNION ALL
SELECT 3 UNION ALL
SELECT 4 UNION ALL
SELECT 5 UNION ALL
SELECT 6 UNION ALL
SELECT 7 UNION ALL
SELECT 8 UNION ALL
SELECT 9 UNION ALL
SELECT 10 UNION ALL
SELECT 11 UNION ALL
SELECT 12
) t1
LEFT JOIN
(
SELECT MONTH(date) AS month, SUM(amount) AS amount
FROM expenses
GROUP BY MONTH(date)
) t2
ON t1.month = t2.month
LEFT JOIN
(
SELECT MONTH(date) AS month, SUM(amount) AS amount
FROM incomes
GROUP BY MONTH(date)
) t3
ON t1.month = t3.month
ORDER BY
t1.month;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.