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

SQL如何结合JOIN、GROUP BY与WHERE查询并保留0值统计结果

实现方法

要返回包含无业务记录name的0值统计结果,必须以存储全量name的静态配置表targets为主表做左关联,具体实现SQL如下:

SELECT
  t.name,
  t.target,
  COALESCE(r.record_cnt, 0) AS current
FROM targets t
LEFT JOIN (
  SELECT
    name,
    COUNT(id) AS record_cnt
  FROM records
  WHERE MONTH(created_on) = MONTH(CURRENT_DATE())
    AND YEAR(created_on) = YEAR(CURRENT_DATE())
  GROUP BY name
) r ON t.name = r.name

关键逻辑点

  • 左连接会保留左表targets的全量name,不会因为右表records无对应数据就过滤掉name3这类没有产生业务记录的配置项
  • 先通过子查询完成当月数据的分组统计,再和配置表关联,既可以避免直接关联原表导致的数据重复、计数错误问题,执行效率也更高
  • 左连接后无匹配记录的name对应的计数字段返回值为NULL,通过COALESCE函数将空值转换为0,即可得到正确的0统计结果

你给出的预期结果中name3的target值标注为3,和targets表中存储的name3对应target=2的原始数据不一致,上述SQL会返回配置表中存储的真实target值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 22:40:50