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

统计部署表hotfix变更数时,如何为所有时间区间返回0而非空

问题:按时间区间统计Hotfix变更计数(无数据时显示0)

场景与需求

现有deployments表数据如下:

deployTimechangenohotfix
2022-08aaa
2022-08bbb
2022-11ccc
2023-01ddd

需要按deployTime时间区间分别统计:

  1. 无Hotfix的变更计数(已实现)
  2. 有Hotfix的变更计数,要求即使该区间无Hotfix记录,也返回计数0,而非不显示该行

当前尝试的问题:

  • 统计无Hotfix的查询可正常返回结果:
SELECT deployTime               AS times ,   
       COUNT(DISTINCT changeno) AS "Change Count" 
FROM deployments 
WHERE hotfix = ''
GROUP BY deployTime 

返回:

timesChange Count
2022-082
2022-111
2023-011
  • 但统计有Hotfix的查询因无匹配记录,返回空结果:
SELECT deployTime               AS times ,   
       COUNT(DISTINCT changeno) AS "Hotfix Count" 
FROM deployments 
WHERE hotfix != ''
GROUP BY deployTime 

解决方案

方法1:条件聚合(简洁高效)

直接在聚合函数中加入条件判断,利用COUNT忽略NULL的特性实现无数据时返回0:

SELECT 
    deployTime AS times,
    COUNT(DISTINCT CASE WHEN hotfix != '' THEN changeno END) AS "Hotfix Count"
FROM deployments
GROUP BY deployTime
ORDER BY deployTime;

方法2:子查询+左连接(兼容更多场景)

先提取所有存在的时间区间,再左连接符合条件的记录,确保所有时间区间都被保留:

SELECT 
    t.times,
    COUNT(DISTINCT d.changeno) AS "Hotfix Count"
FROM (
    -- 获取所有唯一的时间区间
    SELECT DISTINCT deployTime AS times 
    FROM deployments
) t
LEFT JOIN deployments d 
    ON t.times = d.deployTime 
    AND d.hotfix != ''  -- 将筛选条件放在JOIN而非WHERE中
GROUP BY t.times
ORDER BY t.times;

同时统计两类计数(推荐)

如果需要在一个查询中同时得到无Hotfix和有Hotfix的计数,可合并两个条件聚合:

SELECT 
    deployTime AS times,
    COUNT(DISTINCT CASE WHEN hotfix = '' THEN changeno END) AS "Change Count",
    COUNT(DISTINCT CASE WHEN hotfix != '' THEN changeno END) AS "Hotfix Count"
FROM deployments
GROUP BY deployTime
ORDER BY deployTime;

该查询返回结果:

timesChange CountHotfix Count
2022-0820
2022-1110
2023-0110

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 04:12:28