博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
oracle 分析函数——ration_to_report 求占有率(百分比)
阅读量:4324 次
发布时间:2019-06-06

本文共 2226 字,大约阅读时间需要 7 分钟。

oracle 的分析函数有很多,但是这个函数总是会忘记,我想通过这种方式能让自己记起来,不至于下次还要百度。

创表、表数据(平时练手的表):

prompt PL/SQL Developer import fileprompt Created on 2018年7月5日 星期四 by Administratorset feedback offset define offprompt Creating CKX001...create table CKX001(  ID      VARCHAR2(20) not null,  NAME    VARCHAR2(20) not null,  SEX     VARCHAR2(20) not null,  SARL    VARCHAR2(20),  ADDRESS VARCHAR2(500),  TIME    DATE)tablespace USERS  pctfree 10  initrans 1  maxtrans 255  storage  (    initial 64K    next 8K    minextents 1    maxextents unlimited  );prompt Disabling triggers for CKX001...alter table CKX001 disable all triggers;prompt Deleting CKX001...delete from CKX001;commit;prompt Loading CKX001...insert into CKX001 (ID, NAME, SEX, SARL, ADDRESS, TIME)values ('004', '周润发', '1', '2000', '广场', null);insert into CKX001 (ID, NAME, SEX, SARL, ADDRESS, TIME)values ('005', '周星驰', '1', '1500', '商场', null);insert into CKX001 (ID, NAME, SEX, SARL, ADDRESS, TIME)values ('006', '梁朝伟', '1', '1700', '大街', null);insert into CKX001 (ID, NAME, SEX, SARL, ADDRESS, TIME)values ('001', '杨千嬅', '2', '2000', null, to_date('15-05-2018 10:54:19', 'dd-mm-yyyy hh24:mi:ss'));insert into CKX001 (ID, NAME, SEX, SARL, ADDRESS, TIME)values ('002', '张柏芝', '2', '1000', '中心公园', to_date('15-05-2018 10:54:19', 'dd-mm-yyyy hh24:mi:ss'));insert into CKX001 (ID, NAME, SEX, SARL, ADDRESS, TIME)values ('003', '黎姿', '2', '1200', '河马公寓', to_date('12-05-2018 10:54:44', 'dd-mm-yyyy hh24:mi:ss'));commit;prompt 6 records loadedprompt Enabling triggers for CKX001...alter table CKX001 enable all triggers;set feedback onset define onprompt Done.

现在我们要查询每个人的工资占平均工资的百分比:

不会用ration_to_reropt的时候总是要用笨的方法,因为我们要求出每个人占总工资的百分比首先要的到总工资,然后在那每个人的去除得到,

类似:

select name,round(sarl/(select sum(sarl) from ckx001),4)*100||'%' salratio from ckx001;

效果虽然能够达到,但是我们像没有想过实际开发中的数据是来自没多张表,就像做过一个扯蛋的需求,数据来自人员信息表和其他十八张档案表的这种设计,

其实还是当初表设计的人脑子里有坑,虽然十八章表字段有所不同,课大部分完全可以设计到一张表去,然后用一个档案Type的字段去区分就好了,跑偏了,

总之我要说的是这个求百分比的SQL可能基准数据来的就非常困难,并不想我们例子上这个是来自一张表,所以也就很easy,我当时也就是看到自己恶心的SQL

时想简化他,最起码要美观简洁,偶尔也可以装个逼。

像这样:

select name,round(ratio_to_report(sarl) over(),4)*100||'%' salratio from ckx001;

上下两条SQL的效果是一样的,但是党我们的基础数据来自很复杂的sql是,下面这种分析函数的使用会让你的SQL干净而又整洁。

 

转载于:https://www.cnblogs.com/ckxlovejava/p/9270560.html

你可能感兴趣的文章
Ubuntu安装Sun JDK及如何设置默认java JDK
查看>>
[经典算法] 排列组合-N元素集合的M元素子集
查看>>
Codeforces 279D The Minimum Number of Variables 状压dp
查看>>
打分排序系统漫谈2 - 点赞量?点赞率?! 置信区间!
查看>>
valgrind检测linux程序内存泄露
查看>>
Hadoop以及组件介绍
查看>>
1020 Tree Traversals (25)(25 point(s))
查看>>
第一次作业
查看>>
“==”运算符与equals()
查看>>
单工、半双工和全双工的定义
查看>>
Hdu【线段树】基础题.cpp
查看>>
时钟系统
查看>>
BiTree
查看>>
5个基于HTML5的加载动画推荐
查看>>
水平权限漏洞的修复方案
查看>>
静态链接与动态链接的区别
查看>>
Android 关于悬浮窗权限的问题
查看>>
如何使用mysql
查看>>
linux下wc命令详解
查看>>
敏捷开发中软件测试团队的职责和产出是什么?
查看>>