![](/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.