MySql 统计最近 6 个月内的数据,没有数据默认为显示为 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 限制查询的条数。下面是执行结果
这里写图片描述
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 表示将库中的时间字段格式化后与月份进行关联。查询结果如下

这里写图片描述
参考博文:
https://www.jianshu.com/p/47f5b6846df0

猜你喜欢

转载自blog.csdn.net/codejas/article/details/81461015