写在前面
今天我们来学习Oracle中如何来计算求出一个数据结果集的总和的百分比情况,此类情况在开发中虽然不多见,但还是很有必要看一下的。
Oracle之如何求总合的百分比
求总和的百分比,一般都是通过其他语言来配合实现的,为了减轻数据库的压力,通常不会在数据库中直接算出。
但是总是也避免不了直接算出的情况,所以今天我们就来一步步的实现一下。
本次需求,我们会用到两个非常重要的函数,那就是sum函数,和over函数。
让我们来先来一波数据汇总。
select username, sum(amount) total from user_table_cost group by username
上述SQL用于表明将用户费用表,根据用户名称来分组,计算出每个人的缴费总额。
计算出每个人的缴费总额,接下来通过over函数来计算出所有人的缴费总额。
select username, 单人缴费总额, sum(total) over() from (select sum(amount) from user_table_cost group by username)
通过上述SQL,我们就可以得出一个所有人的总额,通过over函数来对数据进行一个汇总,最后得到全部的缴费金额。
剩下的就还有一个百分比字段了,接着来看看吧。
select username, 单人缴费总额, 全部缴费总额, round( (单人缴费总额 / 全部缴费总额) * 100, 2 ) from (select username, 单人缴费总额, sum(total) over() from (select sum(amount) from user_table_cost group by username))
通过上述SQL,我们就可以得到一个单人缴费总额所占全部总额的百分比了。
在这期间,我们使用round函数来计算,并且进行了取小数点两位。
总结
今天学习了Oracle中如何总和的百分比的用法,大家是否能想到自己的项目中哪些数据是可以转化成这种方式实现的呢?