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题 ...
最新文章
- ZNCZZ|新手做车的常见误区
- 计算机实现减法学习心得
- mysql批量导入 导出数据_MySQL批量导入导出数据
- idea中maven导入jar包
- 基于SpringBoot和Vue的个人博客系统
- python bs4模块_python爬虫之Beautifulsoup模块用法详解
- Ubuntu 如何为 XMind 添加快速启动方式和图标
- 我的学生时代之一[小学时代]
- Linux中的Docker容器的数据卷
- C语言佛,佛大c语言毕业前补考.doc
- 指针学习4--合成析构函数做了什么
- 数组字符串那些经典算法:最大子序列和,最长递增子序列,最长公共子串,最长公共子序列,字符串编辑距离,最长不重复子串,最长回文子串 (转)...
- 软件平台与框架的生命周期
- 为什么要使用NAS存储设备呢?
- QFile读取移动硬盘文件卡死问题
- 数字乡村建设浅谈(一):可行性、难点、思考
- CSDN上传资源与修改下载所需积分的问题
- 悟透JavaScript-对象素描
- 【佛系养身】男程序员护肤入门
- 即时通讯软件安全问题分析