分组行值Count(*)统计:按州统计各服务客户数的SQL需求
解决方案:用条件聚合实现按州统计各服务客户数
不需要游标或复杂子查询,条件聚合是处理这类统计需求最简便高效的方案,直接通过一次分组查询就能得到结果。
假设表结构说明
假设你的表名为customer_services,包含列state(州名)、Service1、Service2、Service3(每个客户仅其中一列标记为选中状态,比如值为1/'Y'或非NULL值)。
通用SQL写法(适配大多数场景)
如果服务列是标记型(比如选中为1,未选为0或'N'),用CASE WHEN配合SUM统计:
SELECT state AS 唯一州名, SUM(CASE WHEN Service1 = 1 THEN 1 ELSE 0 END) AS Service1客户数, SUM(CASE WHEN Service2 = 1 THEN 1 ELSE 0 END) AS Service2客户数, SUM(CASE WHEN Service3 = 1 THEN 1 ELSE 0 END) AS Service3客户数 FROM customer_services GROUP BY state ORDER BY state;
简化写法(适用于服务列为互斥NULL的场景)
如果未选择的服务列值为NULL,可以直接用COUNT统计非NULL值的数量:
SELECT state AS 唯一州名, COUNT(Service1) AS Service1客户数, COUNT(Service2) AS Service2客户数, COUNT(Service3) AS Service3客户数 FROM customer_services GROUP BY state ORDER BY state;
方案优势
- 性能远高于游标,一次查询完成所有统计,适合数千条数据的规模;
- 逻辑清晰,易于理解和维护;
- 无需嵌套子查询,代码简洁。
内容的提问来源于stack exchange,提问作者Daniel Sh.
相关产品推荐
相关产品推荐

