SQL如何在不合并原表行的前提下按列分组统计COUNT值
你可以使用窗口函数实现需求,窗口函数不会因为分组合并原表的行,而是会给每个属于同一分组的行都返回对应的聚合结果。
实现代码(支持窗口函数的数据库,如MySQL 8.0+、PostgreSQL、SQL Server等)
SELECT a, b, COUNT(*) OVER (PARTITION BY a, b) AS `count` FROM table_1
原理解释
PARTITION BY a, b按a、b两列对数据做分组,和普通GROUP BY的分组逻辑完全一致- 窗口函数逐行计算结果,每个行都会得到自己所在分组的统计行数,不会合并相同分组的行,完全匹配你需要的
table_2效果
旧版本数据库兼容方案(不支持窗口函数的场景,如MySQL 5.x)
如果你的数据库不支持窗口函数,可以用分组结果和原表关联的方式实现:
SELECT t1.a, t1.b, t2.`count` FROM table_1 t1 INNER JOIN ( SELECT a, b, COUNT(*) AS `count` FROM table_1 GROUP BY a, b ) t2 ON t1.a = t2.a AND t1.b = t2.b
内容的提问来源于stack exchange,提问作者Bowen Peng
相关产品推荐
相关产品推荐

