oracle计算比例,某字段占总数的百分比

oracle计算比例,某字段占总数的百分比,第1张

一、方法

我的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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/991768.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存