SQL 求一列总数的百分比
SQL Finding a percentage of total of one column
例如,我有一个 table 一个员工每小时收到多少请求:
Employee
Requests
Hour
John
12
12pm
Nancy
5
12pm
John
4
1pm
我想创建一个 table,其中包含 (i) 员工,(ii) 他们在所有时间内收到的请求总数除以所有员工收到的请求总数。
所以结果 table 看起来像:
Employee
Percent requests
John
0.76
Nancy
0.24
因为:
约翰的请求总和/总请求数 = (12+4)/(12+4+5)=0.76
和
Nancy 的请求总和 / 请求总数 = 5/(12+4+5)=0.24
我尝试在首先按小时分组时对单个员工的请求求和,但我不确定如何将总请求的总和合并到一个命令中。
很容易找出总请求数的总和,但我只知道如何先在单独的查询中找到它,然后手动将每个员工的总请求数除以总和。我希望能够在一个查询中完成。
你可以这样做:
WITH dataset AS (
SELECT *
FROM
( VALUES
('John', 12 ,'12pm'),
('Nancy', 5, '12pm'),
('John', 4 ,'1pm')
) AS t (Employee, Requests, Hour)
)
select Employee, cast(sum(Requests) as double) / (select sum(Requests) from dataset)
from dataset
group by Employee
输出:
Employee
_col1
Nancy
0.23809523809523808
John
0.7619047619047619
使用window函数:
select employee, sum(requests) as total_requests,
sum(requests) * 1.0 / sum(sum(requests)) over () as ratio
from t
group by employee;
* 1.0
只是为了避免整数除法(假设requests
是一个整数)。
例如,我有一个 table 一个员工每小时收到多少请求:
Employee | Requests | Hour |
---|---|---|
John | 12 | 12pm |
Nancy | 5 | 12pm |
John | 4 | 1pm |
我想创建一个 table,其中包含 (i) 员工,(ii) 他们在所有时间内收到的请求总数除以所有员工收到的请求总数。
所以结果 table 看起来像:
Employee | Percent requests |
---|---|
John | 0.76 |
Nancy | 0.24 |
因为:
约翰的请求总和/总请求数 = (12+4)/(12+4+5)=0.76
和
Nancy 的请求总和 / 请求总数 = 5/(12+4+5)=0.24
我尝试在首先按小时分组时对单个员工的请求求和,但我不确定如何将总请求的总和合并到一个命令中。
很容易找出总请求数的总和,但我只知道如何先在单独的查询中找到它,然后手动将每个员工的总请求数除以总和。我希望能够在一个查询中完成。
你可以这样做:
WITH dataset AS (
SELECT *
FROM
( VALUES
('John', 12 ,'12pm'),
('Nancy', 5, '12pm'),
('John', 4 ,'1pm')
) AS t (Employee, Requests, Hour)
)
select Employee, cast(sum(Requests) as double) / (select sum(Requests) from dataset)
from dataset
group by Employee
输出:
Employee | _col1 |
---|---|
Nancy | 0.23809523809523808 |
John | 0.7619047619047619 |
使用window函数:
select employee, sum(requests) as total_requests,
sum(requests) * 1.0 / sum(sum(requests)) over () as ratio
from t
group by employee;
* 1.0
只是为了避免整数除法(假设requests
是一个整数)。