码迷,mamicode.com
首页 > 数据库 > 详细

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

时间:2018-07-05 23:19:59      阅读:253      评论:0      收藏:0      [点我收藏+]

标签:表数据   comm   name   feedback   方法   delete   tab   init   prompt   

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 求占有率(百分比)

标签:表数据   comm   name   feedback   方法   delete   tab   init   prompt   

原文地址:https://www.cnblogs.com/ckxlovejava/p/9270560.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!