student

sc

teacher

course

  1. 准备工作

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把上面的数据排序, 按照学生idclassid排序

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 重复时保留名次空缺相关推荐

  1. SQL经典50题(MySQL版)

    近段时间一直都在学习MySQL,为了检验自己的学习效果,特意拿了网上经典的SQL50题练了一下. 我用的是MySQL Server 8.0版本(新增了窗口函数rank()等,接下来我会把自己的SQL语 ...

  2. 【SQL经典50题】9.查询和“ 01 “号的同学学习的课程完全相同的其他同学的信息【正解】

    查询所用的表结构见https://blog.csdn.net/zjhbeautiful/article/details/108065336 SQL经典50题第9题正解 题目:查询和" 01 ...

  3. 常见的SQL笔试题和面试题:SQL经典50题

    常见的SQL笔试题和面试题(上):经典50题 已知有如下4张表: 学生表:STUDENT(S#,SNAME,SAGE,SSEX) 课程表:COURSE(C#,CNAME,T#) 成绩表:SC(S#,C ...

  4. mysql sql语句面试经典50题_SQL:经典面试50题

    查询" 01 "课程比" 02 "课程成绩高的学生的信息及课程分数 1.1 查询同时存在" 01 "课程和" 02 "课 ...

  5. Mysql 学生信息经典50题

    Mysql 学生信息经典50题 练习数据 数据表 --1.学生表 Student(SId,Sname,Sage,Ssex) --SId 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学 ...

  6. [Mysql] 经典 50 题

    50道MySql练习题(本文档只有45道)流传自远古,相当经典.这套练习在多样性和难度上平衡的比较好,换句话说,基础sql查询练习有这套就够了. 这套练习在互联网上存在时间悠久,有很多版本,本文档力图 ...

  7. 如何以正确地姿势AK SQL查询50题(精华篇)

    前言------ AK: ALL Killed 这学期学数据库系统概论,作为一个初学者,必须先熟练掌握SQL的基本查询语句,在完成了老师的SQL50题之后,我把我自己地AK姿势记录下来, 便于回忆之余 ...

  8. SQL经典50条语句

    50条SQL经典语句: 表结构: --1.学生表 Student(S,Sname,Sage,Ssex) --S 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别 --2.课程表  ...

  9. abap 取日期最大_Pointer干货分享:SQL面试50题思路解答与分类整理(下)CASE与日期函数...

    这是POINT小数点的第 368篇文章点点写在前面:SQL技能是数据分析师面试中必不可少的环节,小数点数据社区也给大家提供了练习SQL题目的地方,以下是pointer Yongfan整理的SQL50题 ...

最新文章

  1. matlab矩阵运算_MATLAB基础学习之三种基本运算
  2. ThreadPool原理介绍
  3. mybatis中的TypeHandler设计与实现
  4. centos7源代码安装mysql5.7_CentOS7源码编译安装MySQL5.7.11
  5. log4j日志 linux配置,Log4j 日志详细用法
  6. Extensions in UWP Community Toolkit - ViewExtensions
  7. GDG Xian: 假如我是一个浏览器
  8. Javascript自动登录B/S系统的简单实现
  9. 转贴:从现在电力短缺看今后劳动力短缺和高校破产
  10. python中matplotlib出错_Python中使用matplotlib的报错问题
  11. win10英文系统一键装机教程
  12. Tricks(十八)—— 转置 list of lists
  13. python力导向图论文_力导向图(关系图) echarts的运用
  14. 【云周刊】第121期:图管够!灌篮高手、女儿国…阿里日,这帮程序员太会玩了!...
  15. 手把手教你用FineBI做数据可视化
  16. 【慕课网】JavaScript中函数和this
  17. Altium Designer(AD)的简易使用
  18. 基础欠缺,是致命的。
  19. 理想浪漫主义色彩的句子
  20. 第二次作业:网易云音乐案例分析

热门文章

  1. 搜索web搜索引擎_Web设计师的20个最佳图标搜索引擎
  2. 【人脸识别】基于笑脸数据集Genki4k实现笑脸识别
  3. 5分钟深入了解margin属性
  4. c语言加载dll,WSAStartup()函数以及DLL的加载
  5. IPsec技术介绍(转)
  6. 大白话5分钟带你走进人工智能-第十三节多项式回归之维度爆炸和过拟合
  7. 执行ipconfig -renew命令时出错: 系统找不到指定的文件?
  8. 软件测试基础(三)—— 缺陷判断标准、缺陷管理流程、缺陷工具推荐
  9. 远程调试为何要亲历现场,也许也可以这样解决
  10. 蓝桥杯中的暴力破解 ing