【问题标题】:SQL Finding a percentage of total of one columnSQL查找一列总数的百分比
【发布时间】:2021-10-26 08:23:51
【问题描述】:

例如,我有一个员工每小时收到多少请求的表格:

Employee Requests Hour
John 12 12pm
Nancy 5 12pm
John 4 1pm

我想创建一个表,其中包含 (i) 员工,(ii) 他们在所有时间收到的请求总数除以所有员工收到的请求总数。

所以结果表看起来像:

Employee Percent requests
John 0.76
Nancy 0.24

因为:

John 的请求总和 / 总请求 = (12+4)/(12+4+5)=0.76

Nancy 的请求总和 / 总请求 = 5/(12+4+5)=0.24

我尝试在先按小时分组时对单个员工的请求求和,但我不确定如何将总请求的总和合并到一个命令中。

很容易找出总请求的总和,但我只知道如何先在单独的查询中找到它,然后手动将每个员工的总请求除以总和。我希望能够在一个查询中完成。

【问题讨论】:

标签: sql presto


【解决方案1】:

使用窗口函数:

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

【讨论】:

    【解决方案2】:

    你可以这样做:

    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

    【讨论】:

      猜你喜欢
      • 2019-01-18
      • 1970-01-01
      • 2017-05-29
      • 2023-02-18
      • 2013-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多