如何合并分组统计查询与总数量查询以获取用户档案占比
合并SQL查询计算各档案用户占比
我有两个查询语句:
第一个用于统计各档案的用户数:
select count(id) from table_user group by idProfile
第二个用于统计总用户数:
select count(id) from table_user
需要合并这两个查询,获取各档案用户数、总用户数以及对应的档案ID,从而计算各档案的用户占比。
示例数据
| id | idProfile |
|---|---|
| 0 | 1 |
| 1 | 2 |
| 2 | 1 |
| 3 | 3 |
| 4 | 1 |
| 5 | 2 |
| 6 | 2 |
| 7 | 1 |
期望结果
| nbProfileByIdProfile | nbTotalProfile | IdProfile |
|---|---|---|
| 4 | 8 | 1 |
| 3 | 8 | 2 |
| 1 | 8 | 3 |
解决方案
方法一:使用窗口函数(推荐)
窗口函数可直接在分组查询中获取全局总计数,写法简洁且性能更优:
SELECT COUNT(id) AS nbProfileByIdProfile, COUNT(id) OVER() AS nbTotalProfile, idProfile FROM table_user GROUP BY idProfile
COUNT(id) OVER() 会计算整个table_user表的总记录数,和每个分组的用户数一同返回,完美匹配需求。
方法二:使用子查询
通过子查询单独获取总用户数,再与分组统计结果结合:
SELECT COUNT(tu.id) AS nbProfileByIdProfile, (SELECT COUNT(id) FROM table_user) AS nbTotalProfile, tu.idProfile FROM table_user tu GROUP BY tu.idProfile
子查询(SELECT COUNT(id) FROM table_user)先计算总用户数,再将该值与每个档案的用户数关联展示。
两种方法都能得到期望结果,窗口函数在数据量较大时通常表现更好。
内容的提问来源于stack exchange,提问作者user10863293
相关产品推荐
相关产品推荐

