oracle 占比函数
这个函数在oracle帮助文档的位置:SQL Reference里面,很好找的。
除报告详细数据外,许多报告中还包括每行总数的百分比。例如,每名客户的订单相对于总订单的百分比,或每位销售代表的销售额相对于总销售额的百分比。
传统上,Oracle计算百分比的方法是在总计报告的子查询中使用SUM函数总计报告,然后把那个结果放到细节表中相除来计算百分比。你还可以用一个子查询作为SELECT语句表达式:
RATIO_TO_REPORT解析函数使得这种类型的查询更容易编码。Oracle 8i中引入了这个函数,它的格式如下:
RATIO_TO_REPORT (expr) OVER (query_partition_clause)
这个上面的语法我就不多说了,直接看演示的例子吧。
- [root@suys1 ~]# su - oracle
- [oracle@suys1 ~]$ sqlplus / as sysdba
- SQL*Plus: Release 11.2.0.4.0 Production on Fri Jun 6 09:00:03 2014
- Copyright (c) 1982, 2013, Oracle. All rights reserved.
- Connected to an idle instance.
- SQL> startup
- ORACLE instance started.
- Total System Global Area 1653518336 bytes
- Fixed Size 2253784 bytes
- Variable Size 1040190504 bytes
- Database Buffers 603979776 bytes
- Redo Buffers 7094272 bytes
- Database mounted.
- Database opened.
- SQL> conn sec/sec
- Connected.
- SQL>
- SQL> desc emp;
- ERROR:
- ORA-04043: object emp does not exist
- SQL>
- SQL> conn / as sysdba
- Connected.
- SQL> create table sec.emp as select * from scott.emp;--从scott里面造测试数据
- Table created.
- SQL>
- SQL> conn sec/sec
- Connected.
- SQL> select * from emp order by DEPTNO; --检查下造好的数据
- EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
- ---------- ---------- --------- ---------- --------- ---------- ---------- ----------
- 7782 CLARK MANAGER 7839 09-JUN-81 2450 10
- 7839 KING PRESIDENT 17-NOV-81 5000 10
- 7934 MILLER CLERK 7782 23-JAN-82 1300 10
- 7566 JONES MANAGER 7839 02-APR-81 2975 20
- 7902 FORD ANALYST 7566 03-DEC-81 3000 20
- 7876 ADAMS CLERK 7788 23-MAY-87 1100 20
- 7369 SMITH CLERK 7902 17-DEC-80 800 20
- 7788 SCOTT ANALYST 7566 19-APR-87 3000 20
- 7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30
- 7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30
- 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30
- EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
- ---------- ---------- --------- ---------- --------- ---------- ---------- ----------
- 7900 JAMES CLERK 7698 03-DEC-81 950 30
- 7698 BLAKE MANAGER 7839 01-MAY-81 2850 30
- 7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30
- 14 rows selected.
- SQL> select DEPTNO,sum(sal) from emp group by DEPTNO; --看好这些数,一些说明用
- DEPTNO SUM(SAL)
- ---------- ----------
- 30 9400
- 20 10875
- 10 8750
- SQL> select DEPTNO,sum(sal) from emp group by rollup(DEPTNO);
- DEPTNO SUM(SAL)
- ---------- ----------
- 10 8750
- 20 10875
- 30 9400
- 29025
- SQL>
- SQL> SELECT
- 2 empno,ename,ename,hiredate,sal,deptno,
- 3 ratio_to_report(sal) over () as pct1l,
- 4 ratio_to_report(sal) over (partition by deptno) as pct2
- 5 FROM emp;
- EMPNO ENAME ENAME HIREDATE SAL DEPTNO PCT1L PCT2
- ---------- ---------- ---------- --------- ---------- ---------- ---------- ----------
- 7782 CLARK CLARK 09-JUN-81 2450 10 .084409991 .28
- 7839 KING KING 17-NOV-81 5000 10 .172265289 .571428571
- 7934 MILLER MILLER 23-JAN-82 1300 10 .044788975 .148571429
- 7566 JONES JONES 02-APR-81 2975 20 .102497847 .273563218
- 7902 FORD FORD 03-DEC-81 3000 20 .103359173 .275862069
- 7876 ADAMS ADAMS 23-MAY-87 1100 20 .037898363 .101149425
- 7369 SMITH SMITH 17-DEC-80 800 20 .027562446 .073563218
- 7788 SCOTT SCOTT 19-APR-87 3000 20 .103359173 .275862069
- 7521 WARD WARD 22-FEB-81 1250 30 .043066322 .132978723
- 7844 TURNER TURNER 08-SEP-81 1500 30 .051679587 .159574468
- 7499 ALLEN ALLEN 20-FEB-81 1600 30 .055124892 .170212766
- EMPNO ENAME ENAME HIREDATE SAL DEPTNO PCT1L PCT2
- ---------- ---------- ---------- --------- ---------- ---------- ---------- ----------
- 7900 JAMES JAMES 03-DEC-81 950 30 .032730405 .10106383
- 7698 BLAKE BLAKE 01-MAY-81 2850 30 .098191214 .303191489
- 7654 MARTIN MARTIN 28-SEP-81 1250 30 .043066322 .132978723
- 14 rows selected.
- SQL>
- SQL> SELECT
- 2 empno,ename,ename,hiredate,sal,deptno,
- 3 ratio_to_report(sal) over (partition by deptno order by sal ) as pct2
- 4 FROM emp;
- ratio_to_report(sal) over (partition by deptno order by sal ) as pct2
- *
- ERROR at line 3:
- ORA-30487: ORDER BY not allowed here
从上面的例子,大家可以看出这个函数的用法了。
结果里面的
PCT1L是每个SAL占所有记录的SAL的百分比。比如EMPNO=7782的这行,2450/29025=.084409991
PCT2是每个SAL占自己所在部门的百分比,还拿EMPNO=7782的这行, 2450/8750=0.28
还有ratio_to_report是不支持order by的。
oracle 占比函数的更多相关文章
- Oracle LPAD/RPAD函数在处理中文时的注意事项
首先看下Oracle官方对函数的定义: The RPAD function returns an expression, right-padded to a specified length with ...
- Oracle 中 decode 函数用法
Oracle 中 decode 函数用法 含义解释:decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值) 该函数的含义如下:IF 条件=值1 THEN RETURN(翻译 ...
- 重写Oracle的wm_concat函数,自定义分隔符、排序
oracle中,wm_concat函数是一个聚合函数,和mysql中的group_concat函数类似,不过group_concat函数比较强大,可以定义分隔符和排序,当然所谓强大是相对的,这里假使我 ...
- Oracle日期时间函数大全
ORACLE日期时间函数大全 TO_DATE格式(以时间:2007-11-02 13:45:25为例) Year: yy two digits 两位年 显示值:07 yyy three digits ...
- Oracle过程及函数的参数模式,In、out、in out模式
Oracle过程及函数的参数模式 In.out.in out模式 在Oracle中过程与函数都可以有参数,参数的类型可以指定为in.out.in out三种模式. 三种参数的具体说明,如下图所示: ( ...
- oracle的substr函数的用法
oracle的substr函数的用法 取得字符串中指定起始位置和长度的字符串 substr( string, start_position, [ length ] ) 如: substr( ...
- Oracle nvl(),nvl2()函数介绍
NVL函数 Oracle/PLSQL中的一个函数. 格式为: NVL( string1, replace_with) 功能:如果string1为NULL,则NVL函数返回replace_with的值, ...
- oracle wm_concat(column)函数的使用
oracle wm_concat(column)函数使我们经常会使用到的,下面就教您如何使用oraclewm_concat(column)函数实现字段合并,如果您对oracle wm_concat(c ...
- Oracle之自定义函数
数据库中函数包含四个部分:声明.返回值.函数体和异常处理. --没有参数的函数 create or replace function get_user return varchar2 is v_use ...
随机推荐
- kafka.common.KafkaException: Failed to acquire lock on file .lock in /tmp/kafka-logs. A Kafka instance in another process or thread is using this directory.
1.刚才未启动zookeeper集群的时候,直接启动kafka脚本程序,kafka报错了,但是进程号启动起来来,再次启动出现如下所示的问题,这里先将进程号杀死,再启动脚本程序. [hadoop@sla ...
- Comparison of several types of convergence
In functional analysis, several types of convergence are defined, namely, strong convergence for ele ...
- Linux 命令行敲命令 光标移动快捷键
在单词之间跳转,使用Ctrl+左右键. Ctrl+a跳到本行的行首, Ctrl+e则跳到页尾. Ctrl+u删除当前光标前面的文字 ctrl+k-删除当前光标后面的文字 Ctrl+w和Alt+d-对于 ...
- 借用nginx.vim工具进行语法高亮和格式化配置nginx.conf文件
在生产环境中,我们肯定经常用到nginx.conf文件的编排工作,今天在阅读<决战nginx>的时候无意间看到nginx.vim这个辅助工具,于是百度搜索和实际部署检测了一下,其效果确实让 ...
- nginx限制单个IP的最大连接数量限制下载速度
今天seafile服务因为测试在下载文件的时候,带宽占用过大,导致seafile客户端无法登陆的问题. 我们公司的seafile是通过nginx代理的8000端口,因此我这边通过修改nginx配置来解 ...
- android测试--常用控件测试及测试经验(常见)
1.图片选择器 ================测试中遇到的问题记录(除表中记录的)================================================== ①.曾出现,断 ...
- 使用aws中国的s3时,制订bucket poicy时注意注意……
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Pub ...
- day 68 django 之api操作 | jQueryset集合与对象
我们的orm里面分为: jQueryset集合, 还有对象, 我们的jqueryset集合里面可以有多个对象,这句话的意思就是我们的对象是最小的单位,不可以再拆分了,我们的jQueryset集合就相当 ...
- sql语句中start with用法,用于表达一个复杂的目录树存储在一张表中
select * from tablename start with 条件1 connect by prior 条件2 where 条件3
- win10系统桌面快捷键图标异常解决方法
win10系统桌面快捷键图标异常解决方法 前言: 有一次我的一个图标变成白色,找到:https://jingyan.baidu.com/article/948f5924148e67d80ef5f947 ...