You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让SQL查询返回全年所有月份统计(含无数据月份)

如何返回全年所有月份的统计数据(含无数据月份)

当然能实现你的需求!目前你的SQL只返回有数据的月份,核心问题是缺少一个包含全年所有月份的"维度表"来兜底。我们可以通过生成完整的年月组合 + 左连接统计数据的方式,让无数据的月份也显示出来(统计数为0)。

核心思路

  1. 先构建一个包含1-12月的完整月份列表(带月份数字和名称,方便关联排序)
  2. 提取你需要统计的所有年份(或指定特定年份)
  3. 交叉连接月份和年份,得到全年所有可能的年月组合
  4. 左连接你的原有统计查询,用COALESCE把无数据的NULL转为0

具体实现(以MySQL为例)

下面是可直接复用的SQL代码,适配你的需求:

WITH months AS (
    SELECT 1 AS month_num, 'January' AS month_name UNION ALL
    SELECT 2, 'February' UNION ALL
    SELECT 3, 'March' UNION ALL
    SELECT 4, 'April' UNION ALL
    SELECT 5, 'May' UNION ALL
    SELECT 6, 'June' UNION ALL
    SELECT 7, 'July' UNION ALL
    SELECT 8, 'August' UNION ALL
    SELECT 9, 'September' UNION ALL
    SELECT 10, 'October' UNION ALL
    SELECT 11, 'November' UNION ALL
    SELECT 12, 'December'
),
target_years AS (
    -- 提取目标用户类型下所有存在数据的年份
    SELECT DISTINCT YEAR(created_at) AS year FROM tableName WHERE type_of_user = "someType"
)
SELECT 
    m.month_name AS month,
    ty.year,
    -- 无数据时返回0,避免显示NULL
    COALESCE(stats.number, 0) AS number
FROM months m
-- 交叉连接得到每个年份的12个月份
CROSS JOIN target_years ty
-- 左连接统计数据,确保所有年月组合都被保留
LEFT JOIN (
    -- 你的原统计逻辑,按月份数字和年份分组
    SELECT 
        MONTH(created_at) AS month_num,
        YEAR(created_at) AS year,
        COUNT(*) AS number 
    FROM tableName 
    WHERE type_of_user = "someType" 
    GROUP BY year, month_num
) stats 
    ON m.month_num = stats.month_num 
    AND ty.year = stats.year
-- 按年份降序、月份数字排序,保证顺序正确
ORDER BY ty.year DESC, m.month_num;

个性化调整说明

  • 指定单一年份:如果只需要统计某一年(比如2023年),把target_years CTE改成SELECT 2023 AS year即可
  • 本地化月份名称:如果需要中文月份,直接把month_name改成'一月'、'二月'...;或者用数据库函数生成,比如MySQL中MONTHNAME(STR_TO_DATE(m.month_num, '%m'))(需注意字符集和时区设置)
  • 老版本数据库兼容:如果你的MySQL版本低于8.0(不支持CTE),可以把months和target_years换成临时表或直接写在FROM子句中

关键要点

  • 用CROSS JOIN生成所有年月组合,确保每个年份的12个月份都被覆盖
  • LEFT JOIN保留所有年月组合,即使没有对应数据
  • COALESCE函数把无数据时的NULL转为0,符合统计需求

这样调整后,就能得到每个年份的完整12个月统计结果,无数据的月份会显示number=0,完全满足你的需求!

内容的提问来源于stack exchange,提问作者Sergiu Leu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 07:47:56