如何计算表中各category类别的记录占总记录的百分比?
实现分类统计及占比查询
没问题,我来帮你完善这个查询,让它输出每个分类的记录数和占总记录的百分比!
方法一:用窗口函数(推荐,效率更高)
窗口函数可以在一次扫描中同时拿到分组统计数和总记录数,不用额外查询整张表,性能更好。直接修改你的语句就行:
SELECT category, COUNT(1) AS count, ROUND((COUNT(1) * 100.0) / COUNT(*) OVER (), 0) AS percent FROM your_table GROUP BY category;
关键说明:
COUNT(*) OVER ():这个窗口函数会返回表的总记录数,每个分组都能直接引用这个值- 乘以
100.0是为了避免整数除法(比如如果用整数计算10/100会得到0,转成浮点数后才能得到正确的0.1) ROUND(..., 0)是把百分比取整,和你示例里的整数格式一致,如果需要保留小数可以调整第二个参数,比如ROUND(..., 1)保留一位小数
方法二:用子查询(兼容老版本数据库)
如果你的数据库不支持窗口函数(比如非常老的MySQL版本),可以用子查询先获取总记录数:
SELECT category, COUNT(1) AS count, ROUND((COUNT(1) * 100.0) / (SELECT COUNT(*) FROM your_table), 0) AS percent FROM your_table GROUP BY category;
这两种方法都能输出你想要的格式:
category | count | percent cat_a | 10 | 10 cat_b | 80 | 80 cat_c | 10 | 10
内容的提问来源于stack exchange,提问作者Liondancer
相关产品推荐
相关产品推荐

