SQL语句编写:计算UploadDate计数与Destroyed=1计数的差值
修正SQL语句以计算总有效记录数减去Destroyed=1的记录数
原语句存在的问题
- 表名错误:引用了不存在的表
document,实际目标表为Table_A - 过滤条件错误:
WHERE destroyed=1仅统计该条件下的记录,导致count(uploadDate)无法获取所有非空UploadDate的总记录数 - 计算逻辑错误:在
Destroyed=1的过滤范围内,count(Destroyed)与count(uploadDate)结果一致,差值为0,完全不符合需求
正确的SQL写法
以下几种写法均可实现需求,核心逻辑是先统计所有UploadDate非空的总记录数,再减去Destroyed=1的记录数:
写法1:用SUM+CASE统计Destroyed=1的数量
SELECT COUNT(UploadDate) - SUM(CASE WHEN Destroyed = 1 THEN 1 ELSE 0 END) AS Result FROM [dbo].[Table_A]
写法2:用COUNT+CASE统计Destroyed=1的数量(利用COUNT忽略NULL的特性)
SELECT COUNT(UploadDate) - COUNT(CASE WHEN Destroyed = 1 THEN 1 END) AS Result FROM [dbo].[Table_A]
写法3:直接统计等价需求的记录数
如果需求本质是统计UploadDate非空且Destroyed=0的记录数,可直接简化为:
SELECT COUNT(UploadDate) AS Result FROM [dbo].[Table_A] WHERE Destroyed = 0
结果验证
针对你提供的5条插入数据(3条Destroyed=1、2条Destroyed=0,且所有UploadDate非空):
- 总
COUNT(UploadDate)为5 Destroyed=1的记录数为3- 最终计算结果为5-3=2,与直接统计
Destroyed=0的记录数一致
内容的提问来源于stack exchange,提问作者Anjali
相关产品推荐
相关产品推荐

