在PostgreSql中计算百分比

在PostgreSql中计算百分比,sql,postgresql,Sql,Postgresql,我有一张这样的桌子,例如: string adm A 2 A 1 B 2 A 1 C 1 A 2 通过SQL查询,我希望得到如下结果: string perc_adm (%) A 50 B 100 C 0 我想要每个字符串中出现的数字2的百分比。我可以在不同的条件下得到这个,但我只需要一个条件。 还有一些被零除的误差。在这种情况下,如何更正此问题?请

我有一张这样的桌子,例如:

string adm
A       2
A       1
B       2
A       1
C       1
A       2
通过SQL查询,我希望得到如下结果:

string    perc_adm (%)
A            50
B            100
C            0
我想要每个字符串中出现的数字2的百分比。我可以在不同的条件下得到这个,但我只需要一个条件。 还有一些被零除的误差。在这种情况下,如何更正此问题?

请尝试:

select 
    string,
    (cnt_2/total::float)*100 perc_adm
from (
    select 
        string, 
        count(*) total, 
        sum(case when adm = 2 then 1 else 0 end) cnt_2
    from tbl
    group by string
) x
order by string
这里
total::float
将除法转换为
float
值,否则
int/int=>int


在您的示例中,您确实意识到您的百分比总和为150%。根据你的情况,如果你应该回答A,66.66%,B,33.33%,请在问题中加上你的实际代码对不起,我的代码是正确的。我想要每个字符串中出现的数字2的百分比。有4个字符串A,其中两个有数字2,因此百分比为50%。有一个字符串B的值为2,因此出现率为100%。啊,现在问题更清楚了。然后将此示例从注释移至问题。