SQL如何按Column A分组统计Column B各值数量并生成新表
实现方案
核心逻辑
你需要的是典型的行转列统计场景,因为Column B取值固定有限,用条件聚合即可实现,语法兼容绝大多数主流数据库。
统计查询语句(通用版)
SELECT A, SUM(CASE WHEN B = 'X' THEN 1 ELSE 0 END) AS X, SUM(CASE WHEN B = 'Y' THEN 1 ELSE 0 END) AS Y, SUM(CASE WHEN B = 'Z' THEN 1 ELSE 0 END) AS Z FROM 你的源表名称 GROUP BY A;
用你提供的示例源表执行上述查询,输出结果和你给出的预期效果完全一致。
基于统计结果创建新表
不同数据库的建表语法略有差异:
- MySQL/PostgreSQL/Oracle 写法:
CREATE TABLE 新表名称 AS SELECT A, SUM(CASE WHEN B = 'X' THEN 1 ELSE 0 END) AS X, SUM(CASE WHEN B = 'Y' THEN 1 ELSE 0 END) AS Y, SUM(CASE WHEN B = 'Z' THEN 1 ELSE 0 END) AS Z FROM 你的源表名称 GROUP BY A;
- SQL Server 写法:
SELECT A, SUM(CASE WHEN B = 'X' THEN 1 ELSE 0 END) AS X, SUM(CASE WHEN B = 'Y' THEN 1 ELSE 0 END) AS Y, SUM(CASE WHEN B = 'Z' THEN 1 ELSE 0 END) AS Z INTO 新表名称 FROM 你的源表名称 GROUP BY A;
补充说明
如果后续Column B新增了其他分类取值,只需要在SELECT子句中对应新增一行SUM(CASE WHEN B = '新取值' THEN 1 ELSE 0 END) AS 新取值即可。
内容的提问来源于stack exchange,提问作者Prashant Solanki
相关产品推荐
相关产品推荐

