查询各科分数最高的科目名称,学生学号,姓名,分数,排名

1.有三个表student(学生表),sc(成绩表),course(课程表),其定义和数据如下

student:
sid sname sage ssex
01 赵雷 1990-01-01
02 钱电 1990-12-21
03 孙风 1990-12-20
04 李云 1990-12-06
05 周梅 1991-12-01
06 吴兰 1992-01-01
07 郑竹 1989-01-01
09 张三 2017-12-20
10 李四 2017-12-25
11 李四 2012-06-06
12 赵六 2013-06-13
13 孙七 2014-06-01
sc:
sid cid score
01 01 80
01 02 90
01 03 99
02 01 70
02 02 60
02 03 80
03 01 80
03 02 80
03 03 80
04 01 50
04 02 30
04 03 20
04 04 60
05 01 76
05 02 87
06 01 31
06 03 34
07 02 89
07 03 98
course:
cid cname tid
01 语文 02
02 数学 01
03 英语 03
04 生理学 04

解题思路:

1.首先给sc表按照cid分区按照分数降序排序,最后加个排名
select cid,sid,score,row_number() over (partition by CId order by score desc) ranks
from sc

这里不会row_number() over()函数的同学自行百度,搞清楚rank(),dense_rank(),row_number()的区别,以及配上over()函数的用法。

查询结果为:

2.然后和student表、course表连接起来,如果有多个最高分,按照名字的先后顺序排序。
select sc.cid,c.cname,sc.sid,s.sname,sc.score,row_number() over (partition by sc.CId order by sc.score desc,s.sname) ranks
from sc,student s,course c
where s.sid = sc.sid and sc.cid=c.cid

查询的结果为:

3.要选取每科的最高分,那么我们把上面查询的结果看做一个表,查询条件为ranks=1,那么就是选取的每科的最高分,如果说题目是选取每科的前3名,我们只要加条件ranks<=3就可以了,我们来看代码。
select *
from(select sc.cid,c.cname,sc.sid,s.sname,sc.score,row_number() over (partition by sc.CId order by sc.score desc,s.sname) ranks from sc,student s,course cwhere s.sid = sc.sid and sc.cid=c.cid
)a
where ranks=1

查询结果:

结果没问题,我们来看看每科前3的sql和查询结果。

select *
from(select sc.cid,c.cname,sc.sid,s.sname,sc.score,row_number() over (partition by sc.CId order by sc.score desc,s.sname) ranks from sc,student s,course cwhere s.sid = sc.sid and sc.cid=c.cid
)a
where ranks<=3

查询结果:


结果没毛病,如果大家有更好的方法,或者更高效的方法可以一起讨论,欢迎指正。

查询各科分数最高的科目名称,学生学号,姓名,分数,排名相关推荐

  1. 低于90分的成绩 java_查询平均成绩低于60分的学生学号、姓名及成绩。

    查询平均成绩低于60分的学生学号.姓名及成绩.以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 查询平均成绩低于60分的学 ...

  2. sql查询所有课程成绩大于80的学生的姓名

    有一张student_info表 请用sql查询所有课程成绩大于80的学生姓名 name class score 张三 语文 70 张三 数学 82 李四 语文 90 李四 数学 60 王五 语文 9 ...

  3. 查询没有选修1号课程的学生学号及姓名

    select Student.Sno,Sname from SC --从选修表中查询学号.姓名 left join Student --左连接学生表 on Student.Sno not in(sel ...

  4. 21. 查询表sc——查询平均成绩大于等于90分的学生学号和平均成绩

    SELECTsno,AVG(grade) FROMsc GROUP BYsno HAVINGAVG(grade) >= 90;

  5. 数据库嵌套循环查询联系——1.查询选修了课程号为“3”的学生姓名和系别、4.查询其它系中‘2‘号课程比信息系所有学生分数高的学生学号和姓名、6.查询每门课程中低于该课程平均成绩的学生学号和姓名

    1.查询选修了课程号为"3"的学生姓名和系别 Select sname,sdept from student where sno in ( select sno from sc w ...

  6. 查询选修c语言课程的学生学号和姓名,数据库实验(学生信息表)

    目录 数据库实验(学生信息表) 实验一 实验二 实验三 实验四 数据库实验(学生信息表) 实验一 创建数据库以及学生信息表.课程信息表.选课表 create Table student (Sno ch ...

  7. /*1. 查询SC表中的全部数据。*/ SELECT * FROM SC /*2. 查询计算机系学生的姓名和年龄。*/ SELECT Sname,Sex FROM Student WHERE Sd

    1.  查询SC表中的全部数据. SELECT * FROM SC 2.  查询计算机系学生的姓名和年龄. SELECT Sname,Sex FROM Student WHERE Sdept='计算机 ...

  8. c语言学号姓名德育学分,学生德育信息管理系统.cpp

    #include #include #include #include #include using namespace std; struct Student{ char id[30]; char ...

  9. oracle查询各个年级的总分数,1、查询各班各科分数最高的学生学号,姓名,班级名称,科目名称,分数:...

    3.分数表 score: ±---------±------±-------±------+ | courseID | stuID | course | score | ±---------±---- ...

最新文章

  1. 数据结构 – 顺序表
  2. 如何修改安装包程序的产品描述和版权信息
  3. div css导航栏设计,CSS+DIV设计实例:超酷的竖排导航栏
  4. java 中文乱码问题,请注意response.getWriter的顺序
  5. 以太坊、Hyperledger Fabric和Corda,哪个更好?
  6. ROS知识【10】:ROS通信
  7. 《云计算》学习笔记4——Google的云计算原理与应用(分布式结构化数据表BigTable)
  8. 从吴恩达AI For Everyone中学到的十个重要AI观
  9. 【20:30直播】网易老司机聊程序员的职场道路选择
  10. ambari 维护模式及reset API 操作
  11. Eclipse console 中文乱码解决
  12. 深度学习(十九)基于空间金字塔池化的卷积神经网络物体检测
  13. Java基础--成员变量和局部变量(区别、重名问题)
  14. JVM内存分配策略原
  15. flex if(a is b){},flex if(a as b){} 意思
  16. EasyRecovery易恢复15免费数据恢复软件功能介绍
  17. 面试求职-你们想知道的腾讯面经
  18. 【渝粤教育】广东开放大学 商务谈判 形成性考核 (34)
  19. 九宫格拼图android代码,Android 多图上传后将图片进行九宫格展示的实例代码
  20. 秋意浓(2018.9.28)

热门文章

  1. 绝地求生刺激战场经验总结
  2. Java——快手2020校园招聘秋招笔试--[编程题]运动会
  3. 74---Python绘制不同表现形式的狄拉克delta函数(视觉上的delta函数)
  4. antlr (updating)
  5. java趣味程序 五猴分桃_趣味数学及编程拓展epub
  6. IBM AIX 安装说明
  7. 【Matplotlib】 标注摄氏度符号
  8. 复现CVE-2022-10270(向日葵远程代码执行漏洞)
  9. java项目-第122期ssm校园快递物流管理系统-计算机毕业设计项目
  10. 济南小学计算机教师工资多少钱一个月,2019济南中小学教师工资待遇水平新调整通知...