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

如何让SQL统计结果返回0值?用户邮件发送量查询优化

解决SQL统计时无记录用户显示0的问题

原查询的问题在于:WHERE SENT_DATE > '2022-12-20'会直接过滤掉所有不符合日期条件的行,User_ID 3和4的所有行都不满足该条件,因此GROUP BY后不会包含这两个用户,自然无法显示0值。

方案1:基于唯一用户ID的左连接查询

先提取所有存在的用户ID,再左连接符合日期条件的统计数据,确保所有用户都被保留:

SELECT u.USER_ID, COALESCE(COUNT(a.SENT_DATE), 0) AS `Count(Sent_date)`
FROM (SELECT DISTINCT USER_ID FROM ACTIONQUEUE) u
LEFT JOIN ACTIONQUEUE a 
  ON u.USER_ID = a.USER_ID 
  AND a.SENT_DATE > '2022-12-20'
GROUP BY u.USER_ID;
  • 子查询(SELECT DISTINCT USER_ID FROM ACTIONQUEUE)获取所有唯一用户ID,保证不会遗漏任何用户
  • 左连接时将日期条件放在ON子句而非WHERE,避免过滤掉无符合记录的用户
  • COALESCE将NULL(无符合记录时的统计结果)转为0

方案2:使用条件聚合(更简洁)

无需额外子查询,直接在聚合函数中判断每行是否符合条件:

SELECT USER_ID, 
       COUNT(CASE WHEN SENT_DATE > '2022-12-20' THEN SENT_DATE END) AS `Count(Sent_date)`
FROM ACTIONQUEUE
GROUP BY USER_ID;

或用SUM实现相同效果:

SELECT USER_ID, 
       SUM(CASE WHEN SENT_DATE > '2022-12-20' THEN 1 ELSE 0 END) AS `Count(Sent_date)`
FROM ACTIONQUEUE
GROUP BY USER_ID;
  • COUNT会自动忽略NULL值,仅统计符合条件的行
  • SUM通过条件判断对符合行加1,不符合行加0,直接得到统计数

注意事项

建议使用标准日期格式(如'2022-12-20')替代20.12.2022,避免不同数据库对日期格式解析出现歧义。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 19:10:31