如何在COUNT函数中结合CASE与ELSE实现指定分组统计?
合并非x/y统计项的SQL修改方案
你只需要调整原语句的统计逻辑,保留count_x和count_y,新增count_other来汇总所有非x、y的记录,修改后的SQL语句如下:
SELECT COUNT(CASE WHEN column = 'x' THEN 1 END) AS count_x, COUNT(CASE WHEN column = 'y' THEN 1 END) AS count_y, COUNT(CASE WHEN column NOT IN ('x', 'y') THEN 1 END) AS count_other FROM your_table;
逻辑说明:
count_x和count_y的统计逻辑和原来一致,仅对指定值的记录计数。count_other通过CASE判断字段值是否不属于('x','y'):符合条件时返回1,否则默认返回NULL(CASE语句未写ELSE时默认返回NULL)。COUNT()函数会自动忽略NULL值,因此只会统计所有非x、y的记录数,不需要额外写ELSE;如果要明确逻辑,写成CASE WHEN column NOT IN ('x', 'y') THEN 1 ELSE NULL END效果完全相同。
验证示例:
示例数据:
| id | column |
|---|---|
| 1 | x |
| 2 | x |
| 3 | y |
| 4 | a |
| 5 | b |
| 6 | b |
| 7 | c |
执行后预期结果:
| count_x | count_y | count_other |
|---|---|---|
| 2 | 1 | 4 |
内容的提问来源于stack exchange,提问作者pileup
相关产品推荐
相关产品推荐

