一尘不染

在PostgreSQL中计算百分比

sql

我有一个这样的表,例如:

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的百分比。我可以在单独的条件下获得此信息,但我只需要一个条件。我也有一些除以零误差。在这种情况下,我该如何纠正?


阅读 788

收藏
2021-05-23

共1个答案

一尘不染

尝试:

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

sql小提琴演示

2021-05-23