Oracle函数Rank Over Partition使用实例详解(二)

续上一篇总结:

 

3.6 查询各科名次(分区),排名前两位的信息,如:新闻表点击率在前两条的新闻或商品销售在前10名的商品等

--6.查询各科名次(分区),排名前两位的信息,如:新闻表点击率在前两条的新闻或商品销售在前10名的商品等
select *
  from (select t.s_id 学号,
               t.s_name 姓名,
               t.sub_name 科目,
               t.score 成绩,
               dense_rank() over(partition by t.sub_name order by score desc nulls last) 名次
          from t_score t) a
 where a.名次 <= 2;

 查询结果:

 

学号姓名科目成绩名次
4杨过     JAVA90.001
4杨过     Oracle77.001
2李四     Oracle77.001
3张三丰   Oracle0.002
5mike     c++80.001
2李四     数学80.001
1张三     数学0.002
3张三丰   体育120.001
1张三     语文80.001
2李四     语文50.002

 

3.7 查询各同学总分

--7.查询各同学总分
select t.s_id 学号,
       t.s_name 姓名, /*t.sub_name 科目, t.score 成绩, */
       sum(nvl(t.score, 0)) 总分
  from t_score t
 group by t.s_id, t.s_name;

查询结果:

 

学号姓名总分
3张三丰   130
5mike     80
2李四     207
4杨过     167
1张三     80

 

3.8 查询各同学总分名次

--8.查询各同学总分名次
select a.学号, a.姓名,rank() over(order by a.总分 desc) 名次
  from (select t.s_id 学号,
               t.s_name 姓名, /*t.sub_name 科目, t.score 成绩, */
               sum(nvl(t.score, 0)) 总分
          from t_score t
         group by t.s_id, t.s_name) a;

 查询结果:

 

学号姓名名次
2李四     1
4杨过     2
3张三丰   3
5mike     4
1张三     4

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值