SQL如何在单条查询中计算员工总请求占全量总请求的百分比
解决方案
你可以通过单条SQL实现需求,以下提供两种兼容不同场景的写法:
通用兼容写法(适配所有SQL数据库版本)
通过子查询提前计算全量总请求数,再关联计算占比:
SELECT Employee, ROUND(SUM(Requests) / total.total_requests, 2) AS `Percent requests` FROM 你的表名, (SELECT SUM(Requests) AS total_requests FROM 你的表名) AS total GROUP BY Employee, total.total_requests;
逻辑说明:子查询(SELECT SUM(Requests) AS total_requests FROM 你的表名)会先算出所有员工的总请求数,因为结果只有1行,和原表关联后所有行都会带上这个全局总数值,之后按员工分组求和、相除取两位小数即可得到目标结果。
窗口函数写法(适配支持窗口函数的数据库,如MySQL 8.0+、PostgreSQL、SQL Server等)
写法更简洁,不需要显式关联子查询:
SELECT DISTINCT Employee, ROUND(SUM(Requests) OVER (PARTITION BY Employee) / SUM(Requests) OVER (), 2) AS `Percent requests` FROM 你的表名;
逻辑说明:
SUM(Requests) OVER (PARTITION BY Employee)按员工维度分区,计算每个员工的总请求数SUM(Requests) OVER ()不设置分区条件,直接计算全表所有请求的总数值- 加
DISTINCT是为了去重,避免同一个员工返回多条重复结果
使用时把你的表名替换为你实际的表名即可,如果你需要显示带%的百分比格式,把计算逻辑乘以100再拼接%符号即可。
内容的提问来源于stack exchange,提问作者codenoodles
相关产品推荐
相关产品推荐

