加载中…
个人资料
JoyS
JoyS
  • 博客等级:
  • 博客积分:0
  • 博客访问:5,406
  • 关注人气:21
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

postgresql实现类似oracle中ratio_to_report函数

(2013-08-07 14:59:45)
标签:

ratio_to_report

oracle

postgresql

分类: 菜鸟DB开发之Postgresql
-----------------------------------------------------------------------------------------------
       本文为个人笔记,仅供参考,希望对您的疑问有所帮助。欢迎转载,转载请注明出处。谢谢!
-----------------------------------------------------------------------------------------------

今天在做oracle转pg的过程碰到一个oracle有,而pg没有的函数--- ratio_to_report()。
create table a_0807test
 (
 name varchar(20),
 kemu varchar(20),
 score number
 );

  truncate table a_0807test
  insert into a_0807test values('joy','语文',87);
  insert into a_0807test values('joy','英语',100);
  insert into a_0807test values('lucy','语文',98);
  insert into a_0807test values('lucy','语文',92);
  insert into a_0807test values('lily','语文',86);
 
 select name,kemu,score from a_0807test ;
 http://s3/mw690/4c197d42tx6BODeBOhkd2&690

 select name,score,
   ratio_to_report(score) over()as  "占所有科目的百分比",
   ratio_to_report(score) over(partition by kemu) as  "占各科目的百分比"
 from a_0807test ;
 http://s9/mw690/4c197d42tx6BODdwLva38&690


 如果没有这个函数
  select name,score,
  (score/sum(score) over())   as "百分比_占所有科目",
  (score/sum(score) over(partition by kemu))   as "百分比_占各科目"
 from a_0807test
 group by name,score,kemu;
  http://s12/mw690/4c197d42tx6BODfQ0Cnbb&690


  select name,score,
  sum(score) over() as "所有科目总分",
  sum(score) over(partition by kemu)  as "该科目总分"
 from a_0807test
 group by name,score,kemu;
http://s12/mw690/4c197d42tx6BODgutvR5b&690


或者
 select name,score,score/all_per as "百分比_所有科目",score/area_per as "百分比_各科目"
 from (
   select name,score,
  sum(score) over() as all_per,
  sum(score) over(partition by kemu)  as area_per
 from a_0807test
 )
http://s10/mw690/4c197d42tx6BODhcT5D09&690


  truncate table a_0807test;
  insert into a_0807test values('joy','语文',87);
  insert into a_0807test values('joy','英语',100);
  insert into a_0807test values('lucy','语文',98);
  insert into a_0807test values('lucy','语文',92);
  insert into a_0807test values('lily','语文',86);
  insert into a_0807test values('joy','英语',88);
  insert into a_0807test values('joy','语文',99);
  insert into a_0807test values('lucy','英语',80);
  insert into a_0807test values('lucy','英语',84);
  insert into a_0807test values('lily','英语',78);
 
 
 select name,score,kemu,
 ratio_to_report(score) over(partition by kemu) as rtr,
 score/(sum(score) over(partition by kemu)) as ss
 from a_0807test
http://s11/mw690/4c197d42tx6BODhVQKe6a&690

 select name,score,kemu,
 ratio_to_report(score) over(partition by name) as rtr,
 score/(sum(score) over(partition by name)) as ss
 from a_0807test
http://s7/mw690/4c197d42tx6BODkRWIe56&690

 select name,score,kemu,
 ratio_to_report(score) over(partition by kemu) as rtrk,
 score/(sum(score) over(partition by kemu)) as ssk,
 ratio_to_report(score) over() as rtr,
 score/(sum(score) over()) as ss
 from a_0807test
http://s14/mw690/4c197d42tx6BODvti1fbd&690

Ratio_to_report() 括号中的就是分子,over() 括号中的就是分母,
如果分母缺省就是整个占比。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有