1
2
3
4
5
6
7
8
9
10
11
select sdname,ssname,savggrade
from
(select tdname,tsname,tavggrade,row_number() over (partition by tdname order by tavggrade desc) rn
from
(select aname dname,bname sname,avg(cgrade) avggrade
from
department a,student b,takes c
where adepartment_id=bdepartment_id
and bstudent_id=cstudent_id
group by aname,bname) t) s
where srn=1
包含并列的情况,如果一个学院有两个第一,两个人都显示,以上为 sqlserver或oracle写法,其他数据库执行不了
-------------补充-----------
给你个通用的
select s2
from
(select tdname,max(tavggrade) avggrade
from
(select aname dname,bname sname,avg(cgrade) avggrade
from
department a,student b,takes c
where adepartment_id=bdepartment_id
and bstudent_id=cstudent_id
group by aname,bname) t
group by tdname) s1,
(select aname dname,bname sname,avg(cgrade) avggrade
from
department a,student b,takes c
where adepartment_id=bdepartment_id
and bstudent_id=cstudent_id
group by aname,bname) s2
where s1dname=s2dname
and s1avggrade=s2avggrade
--单纯通过top是不行的,要用到row_number() over()才能取到每个班的分别的前5名
select from (select t,row_number() over(partition by 班级 order by 成绩 desc) as fnum from 表名 T) t1 where fnum <=5
select from 成绩表 order by 成绩 fetch first 400 rows only
上面我是用的db2数据库
sql server 可以用top 你都拿去试看 不行就用生成序号 取400的方式
select top 400 from 成绩表 order by 成绩
sql语句是这样的
select count() from student where class=601 and score>(select score from student where name='张三')
这个就求出了在601班的张三前有多少个人,他的名就是这个返回值+1,这个问题不关排序鸟事。做个统计就行了!
你不会是要在页面直接调用sql语句吧!
常规方法是把这个放在一个业务类传给数据访问层做处理后返回结果传给页面
你问的responsewrite这个有点吃力吧!
以上就是关于sql查询某个学生的平均成绩的排名全部的内容,包括:sql查询某个学生的平均成绩的排名、取每个班前5名成绩的sql怎么写、SQL语句查询成绩表中排名前400名的所有列数据,按升序排列等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)