如何在单条SQL查询中统计某字段的Null与非Null记录数?
优雅统计字段Null/非Null记录数的SQL方案
你现在的查询需要手动计算非Null记录数,确实不够高效,这里给你两种更简洁的单查询方案,直接一次性输出总数、已更新(非Null)、未更新(Null)的统计结果:
方案一:利用COUNT函数特性
COUNT(*)会统计所有行,COUNT(列名)会自动忽略该列值为Null的行,刚好可以用来快速计算:
SELECT COUNT(*) AS Total, COUNT(Updated) AS Updated, -- 直接得到Updated非Null的记录数 COUNT(*) - COUNT(Updated) AS NotUpdated -- 总数减去非Null数就是Null的数量 FROM BatchHeaders;
方案二:用CASE表达式精准统计
如果需要更直观的逻辑控制,用CASE配合SUM也能实现,可读性更强:
SELECT COUNT(*) AS Total, SUM(CASE WHEN Updated IS NOT NULL THEN 1 ELSE 0 END) AS Updated, SUM(CASE WHEN Updated IS NULL THEN 1 ELSE 0 END) AS NotUpdated FROM BatchHeaders;
这两种方案都不需要CTE和表连接,单表扫描一次就能出结果,性能和可读性都比你原来的方法好,而且直接拿到所有需要的统计值,不用再手动计算。
内容的提问来源于stack exchange,提问作者Metryg
相关产品推荐
相关产品推荐

