oracle Ratio_to_report的用法
2019独角兽企业重金招聘Python工程师标准>>>
Ratio_to_report函数
Syntax
分析函数RATIO_TO_REPORT 用来计算当前记录的指标expr占开窗函数over中包含记录的所有同一指标的百分比. 这里如果开窗函数的统计结果为null或者为0,就是说占用比率的被除数为0或者为null, 则得到的结果也为0.
开窗条件query_partition_clause决定被除数的值, 如果用户忽略了这个条件, 则计算查询结果中所有记录的汇总值.
用户不能使用其他分析函数或者ratio_to_report作为分析函数ratio_to_report的参数expr, 也就是说这个函数不能循环使用. 但我们可以使用其他普通函数作为这个分析函数的查询结果.
Examples 1
下面的示例演示了如何计算每一个员工的工资占部门全部工资的比例.
创建表
create table T_salary(
F_depart varchar2(20),
F_EMP varchar2(20),
F_salary integer
);
truncate table t_salary;
-- 插入测试数据
insert into t_salary(f_depart, f_emp, f_salary)
select '信息管理部','张三',10000 from dual
union all
select '信息管理部','李四',2000 from dual
union all
select '人力资源部','王五',3000 from dual
union all
select '人力资源部','赵六',10000 from dual;
commit;
--查询每个员工占所在部门的工资比例
select f_depart,f_emp,f_salary,sum(f_salary) over(partition by f_depart) sum_salary,
ratio_to_report(f_salary) over(partition by f_depart) ratio_salary
from t_salary;
--递归查询员工占所在部门的百分比, 以及部门所占公司的工资比例.
select f_depart,f_emp,f_salary,g1,
sum(f_salary) over(partition by decode(g1, 0, f_depart, null), g1) sum_salary,
ratio_to_report(f_salary) over(partition by decode(g1, 0, f_depart, null), g1) r_salary
from (
select f_depart,
f_emp,
sum(f_salary) f_salary, grouping(f_depart) + grouping(F_emp) g1
from t_salary
group by rollup(f_depart, f_emp)
) t
由于分析函数可以使用普通函数的结果作为expr参数, 所以上面的代码又可以整合为下述方式.
select f_depart,
f_emp,
sum(f_salary) f_salary,
sum(sum(f_salary)) over(partition by decode(grouping(f_depart) + grouping(F_emp), 0, f_depart, null),grouping(f_depart) + grouping(F_emp)) sum_salary,
ratio_to_report(sum(f_salary)) over(partition by decode(grouping(f_depart) + grouping(F_emp), 0, f_depart, null), grouping(f_depart) + grouping(F_emp)) r_salary,
grouping(f_depart) + grouping(F_emp) g1
from t_salary
group by rollup(f_depart, f_emp)
转载于:https://my.oschina.net/u/256218/blog/87853
oracle Ratio_to_report的用法相关推荐
- ORACLE的基础用法
ORACLE的基础用法 转 自:http://blog.163.com/kelly_19831017/blog/static/6196787020083133348873/ sqlplus sys/o ...
- 常见Oracle HINT的用法
1. /*+ALL_ROWS*/ 表明对语句块选择基于开销的优化方法,并获得最佳吞吐量,使资源消耗最小化. 例如: SELECT /*+ALL+_ROWS*/ EMP_NO,EMP_NAM,DAT_I ...
- LTRIM、RTRIM和TRIM在ORACLE中的用法:
LTRIM.RTRIM和TRIM在ORACLE中的用法: 1.LTRIM(C1,C2) 其中C1和C2都可以字符串,例如C1是'Miss Liu',C2'MisL'等等.这是第一个和SQL SERVE ...
- oracle 实例用法,Oracle merge into用法以及相关例子示例
以下的文章主要是对Oracle merge into用法以及相关例子的介绍,首先我们以Oracle 9I中加入MERGE入手,以下就是文章的具体内容的分析,希望你浏览完之后会给你带来一些帮助在此方面. ...
- oracle10 数据库审计,Oracle数据库审计用法实例
本节是从ORACLE METALINK的DOC:167293.1翻译整理而来的.通过举例的方式来说明ORACLE审计的用法.ORACLE的审计可以从语句级.对象 本节是从Oracle METALINK ...
- ORACLE 中ROWNUM用法总结!
ORACLE 中ROWNUM用法总结! 对于 Oracle 的 rownum 问题,很多资料都说不支持>,>=,=,between...and,只能用以上符号(<.<=.!=) ...
- oracle中何时会用到join,Oracle中join用法的演示
以下的文章主要介绍的是Oracle中join用法,如果你是其方面的新手,对Oracle中oin的实际用法很感兴趣,但是却找不到一些资料去对其进行更深入的了解的话,你不妨浏览以下的文章对其进行了解. O ...
- 常见 Oracle HINT 的用法
Hint 是Oracle 提供的一种SQL语法,它允许用户在SQL语句中插入相关的语法,从而影响SQL的执行方式. Oracle 19c HINT Comments https://docs.ora ...
- oracle别名as用法
oracle别名as用法 1.在oracle中as的作用主要是为表中的字段添加别名.如下图 2.在命名别名的时候也可以区分大小写,不过要加双引号"",如果不加双引号只是首字母大写的 ...
最新文章
- input框取消光标颜色手机端不生效
- 比double精度更高的数据类型_Oracle数据类型总结
- 使用MASM03 - Win32汇编语言011
- torch 判断相等
- ubunto安装mysql8.13_ubuntu安装mysql[ubuntu部署]
- jQuery设置和获取HTML、文本和值
- windows远程连接ubuntu 黑屏_Windows跟Windows远程连接传输文件
- C++之带有默认参数值的构造函数
- learnpythonthehardway下载_Python【十一】:阶段小结
- ARMA模型的性质 1
- ctr 平滑_CTR预估中的贝叶斯平滑方法及其代码实现
- Ubuntu输入密码登陆后又跳回到登录界面
- 初学UML,画了几个UML图
- SARIMA时间序列模型预测城市房价数据
- python实现kmeans图像分割、一只遥望大海的小狗_【Python】爬虫+ K-means 聚类分析电影海报主色...
- sg90舵机工作原理_舵机跑舵原因无解,锲而不舍终除隐患好文推荐!
- Java版Spring Cloud B2B2C o2o鸿鹄云商平台--概述
- LZY最喜欢的思维题
- PC 真的不行了!Intel、AMD 同遭生死劫
- easyexcel一个很棒的Excel解析工具
热门文章
- #招聘# C++高级攻城师一枚
- Confluence 6 推荐的更新通知设置和禁用
- vue 2.x项目 vue-qriously 生成二维码并下载、cliploard复制粘贴
- 面试者让金山负责webgame的高管崩溃了!
- Codeforces Round #Pi (Div. 2)(A,B,C,D)
- 纯css3鼠标经过出现文字或图片鼠标移走消失
- 【内核】linux内核启动流程详细分析【转】
- loadrunner11使用常见问题(不断整理中)
- Oracle Parallel模式
- Spring中复杂类型注入