一. 需求分析

我们在学习数据库查询时,经常会遇到关于分组和聚合函数的查询,比如查询每门课程的最高分,每位同学的平均分,其实这些都是比较一般的问题。但如果遇到查询每门课程成绩的前几名问题,就会变的很棘手,今天老谢给你唠唠这方面的问题。

比如我们现在有如下三个表:学生表、科目表、成绩表,分别如下:

1. 学生表(student)

2. 科目表(subject)

3. 成绩表(score)

现在如果我们需要获取每门科目前三名同学的姓名学号科目成绩等信息这该如何查询实现

二. 具体实现

其实遇到这种问题,并不单纯是在考察我们的SQL水平,同时也是在考察我们的思考能力,我们得学会思考如何进行查询,如何进行分组,如何进行条件过滤。

1. 先连接查询

首先我们可以根据科目和成绩,来查询同一科目中分数较高的数据。

SELECT *
FROM score s1
LEFT JOIN score s2 ON s1.subject_id = s2.subject_id AND s2.score > s1.score

这样查询到的就是一个成绩记录,同一个科目全部比他分数高的成绩记录就是被关联查询出来。这里为了让第一名也查询出来,我们可以使用外连接进行查询。

2. 再分组过滤

然后我们可以根据学生和科目再进行分组,查询出比这个学生该门科目高的学生成绩条数是多少,如果条数小于3,这样就得到了前三名。

SELECT s1.student_id, s1.subject_id
FROM score s1
LEFT JOIN score s2 ON s1.subject_id = s2.subject_id AND s2.score > s1.score
GROUP BY s1.student_id, s1.subject_id
HAVING count(*) <=2
ORDER BY s1.subject_id

如果出现了并列的情况,也会被查询出来。

现在你可以思考一个问题,如果是让你查询第2到第5名同学呢?

*威哥Java学习交流Q群:691533824
加群备注:CSDN推荐

SQL干货丨关于分组和聚合函数,如何实现查询排名?!相关推荐

  1. 【数据库演练】外键SQL语句的编写分组和聚合函数的组合使用

    外键SQL语句的编写 外键SQL语句的编写 1. 外键约束作用 2. 对于已经存在的字段添加外键约束 3. 在创建数据表时设置外键约束 4. 删除外键约束 5. 小结 演练-分组和聚合函数的组合使用 ...

  2. Elasticsearch Java API 分组、聚合、嵌套相关查询

    Elasticsearch Java API 分组.聚合.嵌套相关查询 翼支付监控系统正使用es做后端存储,这边我们是将日志计算处理过后的数据通过kafka储存到es.选择用es作为数据储存端是考虑到 ...

  3. SQL语句汇总(三)——聚合函数、分组、子查询及组合查询

    聚合函数: SQL中提供的聚合函数可以用来统计.求和.求最值等等. 分类: –COUNT:统计行数量 –SUM:获取单个列的合计值 –AVG:计算某个列的平均值 –MAX:计算列的最大值 –MIN:计 ...

  4. 数据库MySQL基础---约束、表关系、聚合函数、连接查询、分组查询和子查询

    约束 1.主键约束亦成为主码,关键字:primary key,设置了主键约束的列的数据要求:不能为空,不允许重复. 2.自增长策略针对主键,不需要手动给值,自动的值是当前表中该列最大值+1关键字:au ...

  5. MySql基础篇---002 SQL之SELECT使用篇: 基本的SELECT语句,运算符,排序与分页,多表查询,单行函数,聚合函数,子查询

    第03章_基本的SELECT语句 讲师:尚硅谷-宋红康(江湖人称:康师傅) 官网:http://www.atguigu.com 1. SQL概述 1.1 SQL背景知识 1946 年,世界上第一台电脑 ...

  6. mysql 连边聚合_MySQL分组,聚合函数,连表查询,子查询

    >>>分组: group by + group_concat 分组:类似于将一个班级的学生,按照性别或其他条件,分成若干个组,最终以小组为单位显示,如上图中,以post字段对表进行分 ...

  7. 《卸甲笔记》-PostgreSQL和Oracle的SQL差异分析之三:rownum和聚合函数

    PostgreSQL是世界上功能最强大的开源数据库,在国内得到了越来越多机构和开发者的青睐和应用.随着PostgreSQL的应用越来越广泛,Oracle向PostgreSQL数据库的数据迁移需求也越来 ...

  8. 4_MySQL_聚合函数和条件查询

    1. 聚合函数 我们在实际开发中,经常需要这样子的需求:给出某个字段中数据的最大值,最小值,平均值,累加值.记录条数等等.如果没有用聚合函数,我们只能通过查询所有数据,然后再通过 Java 代码来做运 ...

  9. 【数据库】第二章 基础函数、聚合函数、条件查询、子查询和多表查询

    [数据库]第二章 基础函数.条件查询.聚合函数.多表查询和子查询 文章目录 [数据库]第二章 基础函数.条件查询.聚合函数.多表查询和子查询 一.基础函数 二.聚合函数 1.COUNT 2.MAX/M ...

最新文章

  1. 控制器框架Struts与策略模式那点事
  2. centos7 mysql安装与用户设置
  3. 三网合一是指计算机网,什么是三站合一网站?什么是三网合一网站?
  4. 微信回应“取消两分钟内删除功能”;甲骨文裁撤北京中心;Redis 6.0.6 发布| 极客头条
  5. 五大步骤快速搭建个人网站
  6. LanguageTool性能简单测试分析
  7. shiny datatable child row:shiny表格二级子行的展开与折叠
  8. 目前最值得推荐的几款黑科技APP,快来收藏吧!
  9. android mp3 lrc歌词文件utf-8歌词显示为乱码,Android访问Tomcat错误以及mp3player项目乱码问题解决...
  10. JavaWeb 学习路线
  11. 设置谷歌浏览器深色黑色背景
  12. 揭秘0撸资金盘:区块链噱头,拉人头模式,数亿元收割
  13. 【python】迭代器与生成器到底是什么?看完你就知道
  14. 太帅了!钟楚曦这件老爹裤A到炸裂,一般人可穿不出这种范
  15. Arranging Coins 排列硬币
  16. 9.9 买礼物的艰辛 2719
  17. UE4官方的快捷键大全
  18. sw转urdf详细步骤
  19. 免费网络电话App 传统通信破冰者
  20. PHP中给数组中追加元素

热门文章

  1. vs调试时报错:变量已被优化掉,因而不可用
  2. 一男子连开28个黄网被捕,网友:就这点钱,你还是找个班上吧
  3. 照片别放在手机相册了!跟我学,放这4处地方安全又不占手机内存
  4. 程序员之间的鄙视链-2022.10.04
  5. 2010年F1大奖赛巴林揭幕战
  6. 浙大计算机复试上机成绩,浙大计算机研究生复试上机考试-2006年
  7. keil集成环境c语言总结,Keil C51单片机集成开发环境编程与调试教程
  8. 用vim编辑器在行首添加行号、序列号
  9. 机器人 零境交错吧_电击文库零境交错
  10. Jenkins部署Git项目