sql查询某个学生的平均成绩的排名

sql查询某个学生的平均成绩的排名,第1张

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名的所有列数据,按升序排列等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9662928.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存