注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Oracle、MySQL资料及经验

.

 
 
 

日志

 
 

分析函数案例3——占比应用  

2014-04-07 18:54:29|  分类: sql与pl/sql |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

--内容源于梁敬彬的sql优化课

drop table emp purge;

CREATE TABLE emp
(
  emp_id    NUMBER(6),
  ename  VARCHAR2(45),
  dept_id   NUMBER(4),
  hire_date DATE,
  sal    NUMBER(8,2)
);

--创建emp数据
INSERT INTO emp (emp_id, ename, dept_id, hire_date, sal) VALUES (101, 'Tom',     20,  TO_DATE('21-09-1989', 'DD-MM-YYYY'), 2000);
INSERT INTO emp (emp_id, ename, dept_id, hire_date, sal) VALUES (102, 'Mike',    20,  TO_DATE('13-01-1993', 'DD-MM-YYYY'), 8000);
INSERT INTO emp (emp_id, ename, dept_id, hire_date, sal) VALUES (120, 'John',    50,  TO_DATE('18-07-1996', 'DD-MM-YYYY'), 1000);
INSERT INTO emp (emp_id, ename, dept_id, hire_date, sal) VALUES (121, 'Joy',     50,  TO_DATE('10-04-1997', 'DD-MM-YYYY'), 4000);
INSERT INTO emp (emp_id, ename, dept_id, hire_date, sal) VALUES (122, 'Rich',    50,  TO_DATE('01-05-1995', 'DD-MM-YYYY'), 3000);
INSERT INTO emp (emp_id, ename, dept_id, hire_date, sal) VALUES (123, 'Kate',    50,  TO_DATE('10-10-1997', 'DD-MM-YYYY'), 5000);
INSERT INTO emp (emp_id, ename, dept_id, hire_date, sal) VALUES (124, 'Jess',    50,  TO_DATE('16-11-1999', 'DD-MM-YYYY'), 6000);
INSERT INTO emp (emp_id, ename, dept_id, hire_date, sal) VALUES (100, 'Stev',    10,  TO_DATE('01-01-1990', 'DD-MM-YYYY'), 7000);
COMMIT;

set linesize 2000
set pagesize 2000
col emp_id format 999
col dept_id format 99
col sal format 9999
col ename format a5
col hire_date FORMAT DATE


SELECT 
 emp_id,ename,dept_id,hire_date,sal,
 ratio_to_report(sal) OVER () as pct1l,
 ratio_to_report(sal) OVER (partition by dept_id) as pct2
FROM emp;

EMP_ID ENAME DEPT_ID HIRE_DATE        SAL      PCT1L       PCT2
------ ----- ------- -------------- ----- ---------- ----------
   100 Stev       10 01-1月 -90      7000 .194444444          1
   101 Tom        20 21-9月 -89      2000 .055555556         .2
   102 Mike       20 13-1月 -93      8000 .222222222         .8
   124 Jess       50 16-11月-99      6000 .166666667 .315789474
   123 Kate       50 10-10月-97      5000 .138888889 .263157895
   122 Rich       50 01-5月 -95      3000 .083333333 .157894737
   120 John       50 18-7月 -96      1000 .027777778 .052631579
   121 Joy        50 10-4月 -97      4000 .111111111 .210526316

 

--如果用普通的写法来实现,要泪流满面了。

 

 

--注,以下写法会出错: 
SELECT 
 emp_id,ename,dept_id,hire_date,sal,
  ratio_to_report(sal) OVER (partition by dept_id order by sal) as pct3
FROM emp;

ORA-30487: ORDER BY 在此禁用

  评论这张
 
阅读(106)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018