【问题标题】:Get percentages of the total for each group获取每组总数的百分比
【发布时间】:2020-10-19 00:43:02
【问题描述】:

使用 Postgresql 12.2

“用户”表有一个用户 ID 和活动 ID 列表,用于显示哪些广告活动为用户带来了用户。我试图显示每个活动 ID 带来的总数的百分比。

期望的结果是这样的:

campaign_id      | percentage
    -------------+-------------------
     AC          | 0.18
     SM          | 0.37
     BC          | 0.24
     TI          | 0.21

当我尝试时


select campaign_id, (select 
               count(userid) over (partition by campaign_id)
                   from users
                       )
                      /
                     (select 
                         count(userid)
                         from users) as percentage
  from users
  group by campaign_id
;

我收到错误“错误:用作表达式的子查询返回多行。”

【问题讨论】:

    标签: sql postgresql select count window-functions


    【解决方案1】:

    问题在于除法左侧的子查询,它返回多行。在您的聚合查询中,您可以只使用count(*) 来获取users 表中具有相同campaign_id 的行数。至于除法的分母(总行数),您也不需要子查询 - 只需使用窗口函数即可。

    所以:

    select
        campaign_id,
        1.0 * count(*) / sum(count(*)) over() percentage
    from users
    group by campaign_id
    

    【讨论】:

    • 谢谢!有用。我不太明白sum(count(*)) over() percentage 在做什么。如果你有时间,你能再解释一下吗?再次感谢!
    猜你喜欢
    • 2018-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-29
    • 1970-01-01
    • 2021-11-24
    相关资源
    最近更新 更多