SQL查询需求:返回所有名称并仅统计int=1的记录数
实现返回所有名称并按条件计数的SQL查询
问题回顾
你的原数据表结构及数据:
| ID | Name | int |
|---|---|---|
| 1 | test1 | 1 |
| 2 | test2 | 2 |
| 3 | test3 | 0 |
原查询语句SELECT Count(ID) FROM table where int = 1 group by(ID);只能返回符合int=1的记录计数,现在需要返回所有名称,仅对int=1的记录计1,其余计0。
解决方案
可以使用条件聚合函数来实现需求,具体SQL语句如下:
SELECT SUM(CASE WHEN `int` = 1 THEN 1 ELSE 0 END) AS count, Name FROM your_table -- 替换成你的实际表名 GROUP BY ID, Name -- 若Name是唯一值,仅GROUP BY Name即可 ORDER BY ID;
逻辑解释
- 移除WHERE子句:这样不会过滤掉任何记录,能保留所有名称
- CASE条件判断:对每条记录检查
int字段是否等于1,符合条件返回1,否则返回0 - SUM聚合:对每个分组(按ID/Name)的CASE结果求和,得到该名称对应的符合条件的计数
- ORDER BY ID:保证结果顺序和原表一致,匹配你的期望输出
执行结果
运行上述语句后,会得到你想要的结果:
| count | Name |
|---|---|
| 1 | test1 |
| 0 | test2 |
| 0 | test3 |
注意:
int是SQL的保留关键字,建议用反引号(MySQL)或方括号(SQL Server)包裹,避免语法错误。
内容的提问来源于stack exchange,提问作者Lego
相关产品推荐
相关产品推荐

