Oracle里的ratio_to_report函数

Oracle里的ratio_to_report函数

简要

RATIO_TO_REPORT是一个分析函数,用于计算某一列的值在指定分组中的所占的比率。

RATIO_TO_REPORT(col) over ([partition by xxx]) ; 
  • col:需要查询的列,如果该值为空,则比率的值也为空。
  • [partition by xxx]:指定的分组,如果省略该子句,则会计算当前值占指定分组中所有值的比率。
  • over的功能跟窗口函数是一样的

实例

计算个人成绩,占总成绩的占比。

select t.*, ratio_to_report(score) over() from temp t 
OracleMySQL

指定分组。计算个人成绩,占各班级总成绩的占比。

select t.*, ratio_to_report(score) over(partition by class) from temp t 

在这里插入图片描述
下面就是不指定分组,但添加限制条件的情况。相当于对上面的结果进行拆分。

使用MySQL的写法

SELECT t.id,t.name,t.class,t.score,t.total_score,score/total_score FROM 
(
SELECT a.id,a.name,a.class,a.score,b.total_score 
FROM temp a, (SELECT SUM(score) AS total_score FROM temp WHERE class=3) b
WHERE a.class=3
) t
SELECT t.id,t.name,t.class,t.score,t.total_score,score/total_score FROM 
(
SELECT a.id,a.name,a.class,a.score,b.total_score 
FROM temp a, (SELECT SUM(score) AS total_score FROM temp) b 
) t
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值