MySql 统计最近 6 个月内的数据,没有数据默认为显示为 0 墨蓝 2022-05-17 04:42 1636阅读 0赞 在做报表数据统计的时候,用一个折线图用来显示并统计最近 6 个月内的数据结算情况。为了前端小伙伴方便处理数据,需要将没有数据的月份默认填充为 0。 网上查了很久,最终找到了解决办法,写出来分享一下,希望能够帮助到大家。 1、初始化最近的 6 个月份 SELECT CONVERT (t2.year_month_str, CHAR) 时间戳 FROM ( SELECT @rownum :=@rownum + 1 AS num, date_format( DATE_SUB(now(), INTERVAL @rownum MONTH), '%Y/%m' ) AS year_month_str FROM (SELECT @rownum := - 1) AS r_init, ( SELECT c.id FROM yecaishui_tax_return_table_common_items c LIMIT 6 ) AS c_init ) t2 GROUP BY t2.year_month_str `yecaishui_tax_return_table_common_items` 是库中的一个常量表,只要其中的数据记录数大于 6 即可,`LIMIT 6` 限制查询的条数。下面是执行结果 ![这里写图片描述][70] 2、通过 LEFT JOIN 关键字关联查询的数据表 SELECT IFNULL(SUM(i.total), 0.00) AS statementTotalMoney, IFNULL(SUM(i.taal_open), 0.00) AS statementSettledMoney, CONVERT (t2.year_month_str, CHAR) `timeStamp` FROM ( SELECT @rownum :=@rownum + 1 AS num, date_format( DATE_SUB(now(), INTERVAL @rownum MONTH), '%Y/%m' ) AS year_month_str FROM (SELECT @rownum := - 1) AS r_init, ( SELECT c.id FROM yecaishui_tax_return_table_common_items c LIMIT 6 ) AS c_init ) t2 LEFT JOIN yecaishui_income_statement AS i ON ( CONCAT( DATE_FORMAT(i.gmt_create, '%Y'), '/', DATE_FORMAT(i.gmt_create, '%m') ) = t2.year_month_str AND i.delete_flag = 0 ) GROUP BY t2.year_month_str `... = t2.year_month_str` 表示将库中的时间字段格式化后与月份进行关联。查询结果如下 ![这里写图片描述][70 1] 参考博文: [https://www.jianshu.com/p/47f5b6846df0][https_www.jianshu.com_p_47f5b6846df0] [70]: /images/20220517/fc4f0c5ae6024ca1abce37501c0c1014.png [70 1]: /images/20220517/86252e87ad4348c1a850569fea425cb5.png [https_www.jianshu.com_p_47f5b6846df0]: https://www.jianshu.com/p/47f5b6846df0
还没有评论,来说两句吧...