在做报表数据统计的时候,用一个折线图用来显示并统计最近 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 限制查询的条数。下面是执行结果
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 表示将库中的时间字段格式化后与月份进行关联。查询结果如下
本文介绍了如何在MySql中统计最近6个月的数据,当某个月份没有数据时,返回0以方便前端展示折线图。通过初始化6个月份并使用LEFT JOIN进行关联查询,实现了无数据月份填充0的效果。
3706

被折叠的 条评论
为什么被折叠?



