在MySQL中如何分组合并两种状态的统计计数结果
解决方案
要实现按Name分组,统计每个名称下状态为On或Off的对象总数,你可以用以下几种SQL写法:
方法1:结合SUM与CASE表达式
这种方式会保留所有存在的Name,如果某个Name下没有符合条件的记录,统计结果会显示0。
SELECT Name, SUM(CASE WHEN Status IN ('On', 'Off') THEN 1 ELSE 0 END) AS `状态为On或Off的对象数量` FROM object GROUP BY Name;
方法2:利用COUNT的非NULL统计特性
COUNT只会统计非NULL的值,所以当状态符合条件时返回1,否则返回NULL,最终得到符合条件的记录数:
SELECT Name, COUNT(CASE WHEN Status IN ('On', 'Off') THEN 1 END) AS `状态为On或Off的对象数量` FROM object GROUP BY Name;
方法3:先过滤再分组
如果不需要统计那些没有On/Off状态的Name,可以先通过WHERE过滤符合条件的记录,再分组计数:
SELECT Name, COUNT(*) AS `状态为On或Off的对象数量` FROM object WHERE Status IN ('On', 'Off') GROUP BY Name;
内容的提问来源于stack exchange,提问作者A. Floyd
相关产品推荐
相关产品推荐

