Oracle之如何求总和的百分比

简介: Oracle之如何求总和的百分比

写在前面

今天我们来学习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中如何总和的百分比的用法,大家是否能想到自己的项目中哪些数据是可以转化成这种方式实现的呢?

目录
相关文章
|
6月前
|
SQL 存储 Oracle
Oracle之如何生成出连续的数值
Oracle之如何生成出连续的数值
208 1
|
6月前
|
Oracle 关系型数据库
oracle,获取每日24*60,所有分钟数
oracle,获取每日24*60,所有分钟数
121 0
|
SQL Oracle 关系型数据库
Oracle分组取最大值
Oracle分组取最大值
|
SQL Oracle 关系型数据库
Oracle 统计某个字段下不同值的个数
Oracle 统计某个字段下不同值的个数
|
6月前
|
Oracle 关系型数据库
Oracle查询优化-累计求和
【2月更文挑战第6天】【2月更文挑战第14篇】累计求和
62 3
|
6月前
|
缓存 Oracle 关系型数据库
Oracle查询优化-生成连续数值
【2月更文挑战第2天】【2月更文挑战第5篇】nextval是Oracle数据库中用于自增长序列的函数。序列是一个自增长数字的对象,可以用于关系型数据库中的任何表的列中,以保证每条记录拥有唯一标识。
145 4
|
监控 Oracle 关系型数据库
Oracle 计算时间差
Oracle 计算时间差
92 0
|
SQL Oracle 关系型数据库
Oracle 按照每小时分组,求每组数量
Oracle 按照每小时分组,求每组数量
Oracle 按照每小时分组,求每组数量
|
Oracle 关系型数据库 测试技术
Oracle超出最大连接数问题及解决
用过Oracle的应该都熟悉如何查看和设置Oracle数据库的最大连接数。这里就再啰嗦一遍。 查看当前的连接数,可以用:select count(*) from v$process;设置的最大连接数(默认值为150)select value from v$parameter where name = ‘processes’; 修改最大连接数alter system se
2304 0
|
SQL Oracle 关系型数据库
ORACLE找出最大的数返回 GREATEST()函数
ORACLE找出最大的数返回 GREATEST()函数