--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
杨过
JAVA
90.00
1
4
杨过
Oracle
77.00
1
2
李四
Oracle
77.00
1
3
张三丰
Oracle
0.00
2
5
mike
c++
80.00
1
2
李四
数学
80.00
1
1
张三
数学
0.00
2
3
张三丰
体育
120.00
1
1
张三
语文
80.00
1
2
李四
语文
50.00
2
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
5
mike
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;
查询结果: