获取每个组的总百分比

gtlvzcf8  于 2021-08-09  发布在  Java
关注(0)|答案(1)|浏览(359)

使用postgresql 12.2
“users”表有一个userid和campaign的列表,以显示广告活动为用户带来了什么。我想展示一下每一次竞选所带来的总收入的百分比。
预期结果如下:

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
;

我得到一个错误“error:more-one row returned by a subquery used as a expression”

vwhgwdsa

vwhgwdsa1#

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

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

相关问题