sql经典50题之--15. 按各科成绩进行排序,并显示排名, Score 重复时保留名次空缺
表
student
sc
teacher
course
准备工作
1.1group by后面存在多个字段
1.2 left join sc as b
给sc起名为b
1.3 left join… on a.score<b.score
输出内容是:
是循环a表中的全部行, 与b表第一行比, 显示出满足条件的行, 行的列包括b第一行内容
循环a表中的全部行, 与b表中第二行比, 显示出满足条件的行, 行的列包括b第二行内容
……
选好a表中的全部行, 与b表中最后一行比.
2. 分析过程
2.1把上面的数据排序, 按照学生id和classid排序
select * from sc a left join sc b on a.cid = b.cid and a.score < b.score order by a.sid,a.cid |
这里只是截取01,02号学生的成绩与其他同学比较,很明显,01号同学是学霸,3科成绩没人比他高的,02号同学01科目比他高的有3个(03、05、01),02科目比他高的有4个(05、07、03、01),03科目比他高的有2个(01、07)
2.2 接下排序, 然后显示的时候, 显示的时候去重复
根据这个情况来看
01学生的01class,分数为80分, 因为没有人比他高, 所以, b. score都是null.
那, 01 01 80自然就是排行第一. 是count(b.score) + 1.
02学生 01课程 70分, 这个前缀的行数是3. 证明整张sc表中, 有三个该课程的学生比他分数高, 那他的名字自然就是 3+1 =4. 好了现在明白排名的原理了.
2.3 我们加上排名
要计算出这个group组内的行数并+1. 才能知道当前group前三个通用字段的排名.
比如当前group的行数是3, 排名是3+1=4
那加上代码就是:
select a.cid, a.sid, a.score, count(b.score)+1 as rank from sc as a left join sc as b on a.score<b.score and a.cid = b.cid group by a.cid, a.sid,a.score order by a.cid, rank ASC; |
3.最终答案
select a.cid, a.sid, a.score, count(b.score)+1 as rank from sc as a left join sc as b on a.score<b.score and a.cid = b.cid group by a.cid, a.sid,a.score order by a.cid, rank ASC; |
sql经典50题之--15. 按各科成绩进行排序,并显示排名, Score 重复时保留名次空缺相关推荐
- SQL经典50题(MySQL版)
近段时间一直都在学习MySQL,为了检验自己的学习效果,特意拿了网上经典的SQL50题练了一下. 我用的是MySQL Server 8.0版本(新增了窗口函数rank()等,接下来我会把自己的SQL语 ...
- 【SQL经典50题】9.查询和“ 01 “号的同学学习的课程完全相同的其他同学的信息【正解】
查询所用的表结构见https://blog.csdn.net/zjhbeautiful/article/details/108065336 SQL经典50题第9题正解 题目:查询和" 01 ...
- 常见的SQL笔试题和面试题:SQL经典50题
常见的SQL笔试题和面试题(上):经典50题 已知有如下4张表: 学生表:STUDENT(S#,SNAME,SAGE,SSEX) 课程表:COURSE(C#,CNAME,T#) 成绩表:SC(S#,C ...
- mysql sql语句面试经典50题_SQL:经典面试50题
查询" 01 "课程比" 02 "课程成绩高的学生的信息及课程分数 1.1 查询同时存在" 01 "课程和" 02 "课 ...
- Mysql 学生信息经典50题
Mysql 学生信息经典50题 练习数据 数据表 --1.学生表 Student(SId,Sname,Sage,Ssex) --SId 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学 ...
- [Mysql] 经典 50 题
50道MySql练习题(本文档只有45道)流传自远古,相当经典.这套练习在多样性和难度上平衡的比较好,换句话说,基础sql查询练习有这套就够了. 这套练习在互联网上存在时间悠久,有很多版本,本文档力图 ...
- 如何以正确地姿势AK SQL查询50题(精华篇)
前言------ AK: ALL Killed 这学期学数据库系统概论,作为一个初学者,必须先熟练掌握SQL的基本查询语句,在完成了老师的SQL50题之后,我把我自己地AK姿势记录下来, 便于回忆之余 ...
- SQL经典50条语句
50条SQL经典语句: 表结构: --1.学生表 Student(S,Sname,Sage,Ssex) --S 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别 --2.课程表 ...
- abap 取日期最大_Pointer干货分享:SQL面试50题思路解答与分类整理(下)CASE与日期函数...
这是POINT小数点的第 368篇文章点点写在前面:SQL技能是数据分析师面试中必不可少的环节,小数点数据社区也给大家提供了练习SQL题目的地方,以下是pointer Yongfan整理的SQL50题 ...
最新文章
- matlab矩阵运算_MATLAB基础学习之三种基本运算
- ThreadPool原理介绍
- mybatis中的TypeHandler设计与实现
- centos7源代码安装mysql5.7_CentOS7源码编译安装MySQL5.7.11
- log4j日志 linux配置,Log4j 日志详细用法
- Extensions in UWP Community Toolkit - ViewExtensions
- GDG Xian: 假如我是一个浏览器
- Javascript自动登录B/S系统的简单实现
- 转贴:从现在电力短缺看今后劳动力短缺和高校破产
- python中matplotlib出错_Python中使用matplotlib的报错问题
- win10英文系统一键装机教程
- Tricks(十八)—— 转置 list of lists
- python力导向图论文_力导向图(关系图) echarts的运用
- 【云周刊】第121期:图管够!灌篮高手、女儿国…阿里日,这帮程序员太会玩了!...
- 手把手教你用FineBI做数据可视化
- 【慕课网】JavaScript中函数和this
- Altium Designer(AD)的简易使用
- 基础欠缺,是致命的。
- 理想浪漫主义色彩的句子
- 第二次作业:网易云音乐案例分析