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

热门文章

  1. 2020东方证券--暑假开发测试工程师--实习笔试经验
  2. Freemarker模板和依赖
  3. 德邦快递 x 华为:总成本下降15%,暴力分拣减少50%,智慧物流再提速!
  4. 二、crm用户登录实现
  5. 鸿蒙科学实验课,无字天书、人造雪等30个小实验玩出大科学
  6. 什么是虚拟内存?服务器虚拟内存怎么设置最好?
  7. Eustia of the Tarnished Wings
  8. Android EditText使用总结
  9. 盒子模型的边框及样式
  10. 简述:一款优秀的缺陷管理系统有哪些功能特点!