mysql - 如何在 MySQL 中按月分组并获得结果,即使是对它们没有值(value)的月份

标签 mysql sql

我有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')

从这段代码中,我得到以下输出:

enter image description here

我在“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/

相关文章:

mysql - 如何向此查询添加 If Else End If

mysql - 为什么内连接比单独查询慢

java - 从远程计算机访问 XAMPP 上的 MySQL 数据库

MySQL 不在简单的选择查询中使用我定义的索引

php - 表行未更新

php - 如何将 PHP 变量插入到 SQL 查询中

sql - 我应该在删除表之前截断表以避免日志记录开销吗?

mysql - LEFT OUTER JOIN 没有显示所有行?

php - SQL 仅检索数据库中的第一项

mysql - 尝试从 MySQL 中获取日期格式的列数据