irpas技术客

oracle计算比例,某字段占总数的百分比_异色小世界_oracle 百分比

irpas 1423

一、方法

我的sql语句本来就计算好了不同字段的记录数,只需要再统计一下占总记录数的百分比即可,也就是在select后加上这段代码:

100 * round( COUNT( * ) / SUM( COUNT( * )) OVER (), 4 ) || '%' percent

这个语句中用到的几个sql函数讲解: 1、ROUND() 函数 :

用于把数值字段舍入为指定的小数位数,即保留几位小数。round(a,b) a 表示要舍入的字段;b规定要返回的小数位数。详细说明:SQL ROUND() 函数

2、COUNT() 函数

返回匹配指定条件的行数。COUNT(*) 函数返回表中的记录数。详细说明:SQL COUNT() 函数

3、SUM() 函数

SUM 函数返回该列数值的总和。结合上面的COUNT() 函数说明,这里的 sum( count(*) ) 即为 count 这一列数值的总和,也就是总记录数。详细说明:SQL SUM() 函数

4、OVER() 函数

以前使用聚合函数必须分组,即便没有group by 子句,也是默认将表中所有的数据分成了1组,来聚合。通过使用over子句可以在不分组的情况下实现聚合运算,在查询结果集中既包含基础行的数据也包含聚合函数的值。(可以把over()子句理解成是“后台运行的数据”,只是为了 “用一下” 聚合函数或者是排名函数,并不影响实际显示的数据。在后台提供数据。)当over()子句与聚合函数一起使用时,可以直接写count(*)over(),不在over()子句中进行任何分区,表示把整个表分为一个区在这个句子中,如果去掉 OVER() 函数,会提示错误: ORA-00937: 不是单组分组函数详细说明: -sql语句关键字over的作用及用法 sql语句关键字over的作用及用法2 二、参考文章

参考文章:oracle计算比例,某字段的百分比 参考文章内容:

在oracle统计中,常常需要统计某些字段的占比,这里记录一下。 原始数据如下: 当需要知道不同工作的职工的占比时,即统计job列各自占总数的百分比。

SELECT JOB,COUNT( * ) COUNT_JOB, 100 * round( COUNT( * ) / SUM( COUNT( * )) OVER (), 4 ) || '%' percent FROM EMP t GROUP BY JOB

即可获得如下结果: 当需要对某些特定值统计时,如工资大于2000的占比。 需要将特定值筛选出来然后与总数相除。这里就需要用到case when进行判别

SELECT (CASE WHEN T.SAL > 2000 THEN '工资大于2000' WHEN T.SAL <= 2000 THEN '工资不大于2000' END) sal, COUNT(*), 100 * ROUND(COUNT(*) / SUM(COUNT(*)) OVER(), 4) || '%' PERCENT FROM EMP T GROUP BY CASE WHEN T.SAL > 2000 THEN '工资大于2000' WHEN T.SAL <= 2000 THEN '工资不大于2000' END


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #oracle #百分比 #Round #count