如何在同一SQL查询中获取分组统计后的总计数?
解决聚合函数嵌套导致的SQL报错问题
你遇到的报错是因为SQL不允许在同一层级的SELECT语句中,直接用聚合函数包裹另一个聚合函数(比如SUM(COUNT(*))这种写法)。要在每行同时显示分组统计数和总计数,有两种常用方法:
方法一:使用窗口函数(推荐,适用于支持窗口函数的数据库)
利用窗口函数可以在分组统计的同时,计算整个结果集的聚合值:
SELECT FieldName, COUNT(*) AS count, SUM(COUNT(*)) OVER () AS total_sum FROM TABLE GROUP BY FieldName;
OVER ()指定窗口范围为整个分组后的结果集,这样SUM(COUNT(*))会计算所有分组count值的总和(也就是表的总记录数),并且每行都会显示这个总数值。
方法二:使用子查询(兼容旧版数据库)
先通过子查询完成分组统计,再在外层查询中获取总计数:
SELECT t.FieldName, t.count, (SELECT COUNT(*) FROM TABLE) AS total_sum FROM ( SELECT FieldName, COUNT(*) AS count FROM TABLE GROUP BY FieldName ) t;
这里子查询先得到每个FieldName的统计数,外层查询通过独立的子查询获取整个表的总记录数,同样能实现需求。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

