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是一个整数)。