Postgresql 频率 table,百分比分区和分组依据

Postgresql frequency table with percentage partition over and group by

我正在尝试在 Postgresql

中创建一个带有百分比的频率 table

如果有人熟悉 SAS,我正在尝试重新创建一个 proc 频率 table

下面我试图通过 var1,var2

获取一组频率
var1     var2    frequency  percentage 
A        20       1          33%
A        30       1          33%
A        40       1          33%
B        20       4          80%
B        30       1          20%

现在这很容易

select var1
,var2
,count(*)
from table
group by 1,2

棘手的是我尝试添加一个百分比列,该百分比列基于 var1 分布

select var1
,var2
,count(*)
,count(*)/count(*) over(partition by var1)
from table
group by 1,2

我用上面的代码得到了一个错误的答案

您想求和 count(*) 个值。所以:

select var1, var2, count(*),
       count(*) * 1.0 / sum(count(*)) over (partition by var1)
from table
group by 1, 2;

您的代码仅计算 var 聚合后的每个行数。因此,它实际上返回的是加权平均值——可能有用但不是您想要的东西。