oracle 分析函数——ration_to_report 求占有率(百分比)

Posted 沙弥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle 分析函数——ration_to_report 求占有率(百分比)相关的知识,希望对你有一定的参考价值。

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

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

prompt PL/SQL Developer import file
prompt Created on 2018年7月5日 星期四 by Administrator
set feedback off
set define off
prompt 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 loaded
prompt Enabling triggers for CKX001...
alter table CKX001 enable all triggers;
set feedback on
set define on
prompt 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干净而又整洁。

 

以上是关于oracle 分析函数——ration_to_report 求占有率(百分比)的主要内容,如果未能解决你的问题,请参考以下文章

oracle 分析函数问题

[转]oracle 分析函数over

Oracle-分析函数之sum(...) over(...)

Oracle分析函数入门

Oracle分析函数入门

Oracle-分析函数_总结