我有payment
数据表(MySQL)记录所有付款。我想按日期对所有付款进行分组。实际上我想按月对他们进行分组,以分析他们特定月份的收入是多少。如果特定月份没有付款,我需要将其设置为 0。
这是我的 SQL 代码。
SELECT SUM(p.sub_total) as sold_income , month(p.invoice_date) as income_month ,MONTHNAME(p.invoice_date) as month_name, YEAR(p.invoice_date) as income_year FROM payment p where (p.invoice_date BETWEEN '2018-01-01' AND '2018-08-01') GROUP BY DATE_FORMAT(p.invoice_date, '%Y%m')
从这段代码中,我得到以下输出:
我在“2018-01-01”和“2018-08-01”之间搜索。所以应该有7个月和7个结果。如果第 1 个月(一月)没有付款,我想要 sold_income = 0
;
我该怎么做?请帮助我......
最佳答案
生成日期并与此表格连接并预测结果
SELECT SUM(p.sub_total) as sold_income , month(C_date ) as income_month ,MONTHNAME(C_date ) as month_name, YEAR(C_date ) as income_year from
(
select * from
(select adddate('1970-01-01',t4*10000 + t3*1000 + t2*100 + t1*10 + t0) C_date from
(select 0 t0 union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t0,
(select 0 t1 union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t1,
(select 0 t2 union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t2,
(select 0 t3 union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t3,
(select 0 t4 union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t4) v
where C_date between '2017-08-01' and '2018-12-31'
) All_date
left join payment p on on date(p.invoice_date )=All_date.C_date
where C_date
BETWEEN '2017-08-01' AND '2018-08-01'
GROUP BY income_month ,month_name,income_year
关于mysql - 如何在 MySQL 中按月分组并获得结果,即使是对它们没有值(value)的月份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52128843/