MySql 统计最近 6 个月内的数据,没有数据默认为显示为 0

本文介绍了如何在MySql中统计最近6个月的数据,当某个月份没有数据时,返回0以方便前端展示折线图。通过初始化6个月份并使用LEFT JOIN进行关联查询,实现了无数据月份填充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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值