oracle在表中查询姓名,学号,班级,成绩,成绩在整个年级的排名,成绩在本班的排名,只查看年级排名前十的学生
答案:1 悬赏:30 手机版
解决时间 2021-04-09 01:04
- 提问者网友:欲劫无渡
- 2021-04-08 18:06
oracle在表中查询姓名,学号,班级,成绩,成绩在整个年级的排名,成绩在本班的排名,只查看年级排名前十的学生
最佳答案
- 五星知识达人网友:爱难随人意
- 2021-04-08 18:16
两个办法:
先找出年级排名前十的,然后再根据班级排名即可。
把年级排名和班级排名全部列出,然后再找年级排名前十的。
相对而言第一种办法比较好,二次查询的时候相对内容要少些。
select rownum 年级排名,rank() over( partition by class_no order by score) as 班级排名, name,stu_no,class_no,score from (select name,stu_no,class_no,score from table order by score) where rownum<=10.
第二种写法则是反过来,先排全年级的名次和班级名次,然后再找年级排名前十。这样做的话查询压力比较大。
select * from (select rank() over(order by score) as 年级排名,rank() over( partition by class_no order by score) as 班级排名,name,stu_no,class_no,score from table) where 年级排名<=10
先找出年级排名前十的,然后再根据班级排名即可。
把年级排名和班级排名全部列出,然后再找年级排名前十的。
相对而言第一种办法比较好,二次查询的时候相对内容要少些。
select rownum 年级排名,rank() over( partition by class_no order by score) as 班级排名, name,stu_no,class_no,score from (select name,stu_no,class_no,score from table order by score) where rownum<=10.
第二种写法则是反过来,先排全年级的名次和班级名次,然后再找年级排名前十。这样做的话查询压力比较大。
select * from (select rank() over(order by score) as 年级排名,rank() over( partition by class_no order by score) as 班级排名,name,stu_no,class_no,score from table) where 年级排名<=10
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯