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

SQL统计confirmed_at列空值与非空值结果不符,求助排查问题

问题原因及修复方案

你的问题出在CASE表达式判断NULL值的方式错误。SQL里NULL是特殊值,不能用case column when null这种等价于column = null的写法来判断——因为NULL和任何值(包括自身)比较的结果都是UNKNOWN,永远不会匹配成功,所以你的SUM(case when null then 1 else 0 end)永远统计不到1,自然结果里Null Values是0,Non-null values被错误统计成4。

修正后的SQL

SELECT 
   date(`user`.`created_at`) AS `Date`, 
   SUM(case when `user`.`confirmed_at` IS NULL then 1 else 0 end) AS `Null values`,
   SUM(case when `user`.`confirmed_at` IS NOT NULL then 1 else 0 end) AS `Non-null values`
FROM `user`
GROUP BY date(`user`.`created_at`);

或者也可以用更简洁的写法,利用COUNT函数的特性:COUNT(column)会自动忽略NULL值,COUNT(*)统计所有行数,所以也可以写成:

SELECT 
   date(`user`.`created_at`) AS `Date`, 
   COUNT(*) - COUNT(`user`.`confirmed_at`) AS `Null values`,
   COUNT(`user`.`confirmed_at`) AS `Non-null values`
FROM `user`
GROUP BY date(`user`.`created_at`);

这两种写法都能得到你预期的结果:

Date      | Null Values | non-null values
1/12/2022 | 1           | 3

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 11:55:26