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去重 使用 || 拼接 % 后即可达到期望的效果;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宇弟儿《劉》lxy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值