Postgres使用sql语句统计字段中某个值在这个字段中的占比以百分比显示

sql查询语句一般是我们工作中接触数据库使用最频繁的语句,select * from tables。以这种通用写法去扩展去查询分析数据;

例如我们在一个表中,有 编号、对应状态 这俩个字段。 “编号字段的值是有重复的”,对应的状态值也会有多个。我们想查一下,一个编号对应的各状态占比,占比是以各状态对应的编号出现次数占总的状态次数的占比,并以百分比显示。

列举:

SELECT count(distinct t.编号) 数量,
(round((count(distinct t.编号) filter ( where t.对应状态 = '状态A')* 100.0 / count(distinct t.编号)),2) || '%') 状态A占比率,
(round((count(distinct t.编号) filter ( where t.对应状态 = '状态B')* 100.0 / count(distinct t.编号)),2) || '%') 状态B占比率,
(round((count(distinct t.编号) filter ( where t.对应状态 = '状态C')* 100.0 / count(distinct t.编号)),2) || '%') 状态C占比率
FROM "测试表" t where t.状态 = '已完成';

大致结果为 A,B,C 三种状态并且在测试表中状态为已完成的占比率,如果根据实际环境来处理分析的话。替换相应字段和表名即可。

count函数用来统计某个字段的总和 统计列数;
round函数用来指定数据的四舍五入,在我们语句后面的数字2 就是代表我们本次的查询结果保留两位小数。即输出结果为 80.88% 该格式的数据占比;
filter可以对数据实现聚合过滤;
结合count和 distinct去重 使用 || 拼接 % 后即可达到期望的效果;

你可能感兴趣的:(IT,程序员,sql,数据库)