查询各科分数最高的科目名称,学生学号,姓名,分数,排名
查询各科分数最高的科目名称,学生学号,姓名,分数,排名
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
查询结果:
结果没毛病,如果大家有更好的方法,或者更高效的方法可以一起讨论,欢迎指正。
查询各科分数最高的科目名称,学生学号,姓名,分数,排名相关推荐
- 低于90分的成绩 java_查询平均成绩低于60分的学生学号、姓名及成绩。
查询平均成绩低于60分的学生学号.姓名及成绩.以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 查询平均成绩低于60分的学 ...
- sql查询所有课程成绩大于80的学生的姓名
有一张student_info表 请用sql查询所有课程成绩大于80的学生姓名 name class score 张三 语文 70 张三 数学 82 李四 语文 90 李四 数学 60 王五 语文 9 ...
- 查询没有选修1号课程的学生学号及姓名
select Student.Sno,Sname from SC --从选修表中查询学号.姓名 left join Student --左连接学生表 on Student.Sno not in(sel ...
- 21. 查询表sc——查询平均成绩大于等于90分的学生学号和平均成绩
SELECTsno,AVG(grade) FROMsc GROUP BYsno HAVINGAVG(grade) >= 90;
- 数据库嵌套循环查询联系——1.查询选修了课程号为“3”的学生姓名和系别、4.查询其它系中‘2‘号课程比信息系所有学生分数高的学生学号和姓名、6.查询每门课程中低于该课程平均成绩的学生学号和姓名
1.查询选修了课程号为"3"的学生姓名和系别 Select sname,sdept from student where sno in ( select sno from sc w ...
- 查询选修c语言课程的学生学号和姓名,数据库实验(学生信息表)
目录 数据库实验(学生信息表) 实验一 实验二 实验三 实验四 数据库实验(学生信息表) 实验一 创建数据库以及学生信息表.课程信息表.选课表 create Table student (Sno ch ...
- /*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='计算机 ...
- c语言学号姓名德育学分,学生德育信息管理系统.cpp
#include #include #include #include #include using namespace std; struct Student{ char id[30]; char ...
- oracle查询各个年级的总分数,1、查询各班各科分数最高的学生学号,姓名,班级名称,科目名称,分数:...
3.分数表 score: ±---------±------±-------±------+ | courseID | stuID | course | score | ±---------±---- ...
最新文章
- 数据结构 – 顺序表
- 如何修改安装包程序的产品描述和版权信息
- div css导航栏设计,CSS+DIV设计实例:超酷的竖排导航栏
- java 中文乱码问题,请注意response.getWriter的顺序
- 以太坊、Hyperledger Fabric和Corda,哪个更好?
- ROS知识【10】:ROS通信
- 《云计算》学习笔记4——Google的云计算原理与应用(分布式结构化数据表BigTable)
- 从吴恩达AI For Everyone中学到的十个重要AI观
- 【20:30直播】网易老司机聊程序员的职场道路选择
- ambari 维护模式及reset API 操作
- Eclipse console 中文乱码解决
- 深度学习(十九)基于空间金字塔池化的卷积神经网络物体检测
- Java基础--成员变量和局部变量(区别、重名问题)
- JVM内存分配策略原
- flex if(a is b){},flex if(a as b){} 意思
- EasyRecovery易恢复15免费数据恢复软件功能介绍
- 面试求职-你们想知道的腾讯面经
- 【渝粤教育】广东开放大学 商务谈判 形成性考核 (34)
- 九宫格拼图android代码,Android 多图上传后将图片进行九宫格展示的实例代码
- 秋意浓(2018.9.28)
热门文章
- 绝地求生刺激战场经验总结
- Java——快手2020校园招聘秋招笔试--[编程题]运动会
- 74---Python绘制不同表现形式的狄拉克delta函数(视觉上的delta函数)
- antlr (updating)
- java趣味程序 五猴分桃_趣味数学及编程拓展epub
- IBM AIX 安装说明
- 【Matplotlib】 标注摄氏度符号
- 复现CVE-2022-10270(向日葵远程代码执行漏洞)
- java项目-第122期ssm校园快递物流管理系统-计算机毕业设计项目
- 济南小学计算机教师工资多少钱一个月,2019济南中小学教师工资待遇水平新调整通知...