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
聚合后的每个行数。因此,它实际上返回的是加权平均值——可能有用但不是您想要的东西。
我正在尝试在 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
聚合后的每个行数。因此,它实际上返回的是加权平均值——可能有用但不是您想要的东西。