SQL干货丨关于分组和聚合函数,如何实现查询排名?!
一. 需求分析
我们在学习数据库查询时,经常会遇到关于分组和聚合函数的查询,比如查询每门课程的最高分,每位同学的平均分,其实这些都是比较一般的问题。但如果遇到查询每门课程成绩的前几名问题,就会变的很棘手,今天老谢给你唠唠这方面的问题。
比如我们现在有如下三个表:学生表、科目表、成绩表,分别如下:
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干货丨关于分组和聚合函数,如何实现查询排名?!相关推荐
- 【数据库演练】外键SQL语句的编写分组和聚合函数的组合使用
外键SQL语句的编写 外键SQL语句的编写 1. 外键约束作用 2. 对于已经存在的字段添加外键约束 3. 在创建数据表时设置外键约束 4. 删除外键约束 5. 小结 演练-分组和聚合函数的组合使用 ...
- Elasticsearch Java API 分组、聚合、嵌套相关查询
Elasticsearch Java API 分组.聚合.嵌套相关查询 翼支付监控系统正使用es做后端存储,这边我们是将日志计算处理过后的数据通过kafka储存到es.选择用es作为数据储存端是考虑到 ...
- SQL语句汇总(三)——聚合函数、分组、子查询及组合查询
聚合函数: SQL中提供的聚合函数可以用来统计.求和.求最值等等. 分类: –COUNT:统计行数量 –SUM:获取单个列的合计值 –AVG:计算某个列的平均值 –MAX:计算列的最大值 –MIN:计 ...
- 数据库MySQL基础---约束、表关系、聚合函数、连接查询、分组查询和子查询
约束 1.主键约束亦成为主码,关键字:primary key,设置了主键约束的列的数据要求:不能为空,不允许重复. 2.自增长策略针对主键,不需要手动给值,自动的值是当前表中该列最大值+1关键字:au ...
- MySql基础篇---002 SQL之SELECT使用篇: 基本的SELECT语句,运算符,排序与分页,多表查询,单行函数,聚合函数,子查询
第03章_基本的SELECT语句 讲师:尚硅谷-宋红康(江湖人称:康师傅) 官网:http://www.atguigu.com 1. SQL概述 1.1 SQL背景知识 1946 年,世界上第一台电脑 ...
- mysql 连边聚合_MySQL分组,聚合函数,连表查询,子查询
>>>分组: group by + group_concat 分组:类似于将一个班级的学生,按照性别或其他条件,分成若干个组,最终以小组为单位显示,如上图中,以post字段对表进行分 ...
- 《卸甲笔记》-PostgreSQL和Oracle的SQL差异分析之三:rownum和聚合函数
PostgreSQL是世界上功能最强大的开源数据库,在国内得到了越来越多机构和开发者的青睐和应用.随着PostgreSQL的应用越来越广泛,Oracle向PostgreSQL数据库的数据迁移需求也越来 ...
- 4_MySQL_聚合函数和条件查询
1. 聚合函数 我们在实际开发中,经常需要这样子的需求:给出某个字段中数据的最大值,最小值,平均值,累加值.记录条数等等.如果没有用聚合函数,我们只能通过查询所有数据,然后再通过 Java 代码来做运 ...
- 【数据库】第二章 基础函数、聚合函数、条件查询、子查询和多表查询
[数据库]第二章 基础函数.条件查询.聚合函数.多表查询和子查询 文章目录 [数据库]第二章 基础函数.条件查询.聚合函数.多表查询和子查询 一.基础函数 二.聚合函数 1.COUNT 2.MAX/M ...
最新文章
- 控制器框架Struts与策略模式那点事
- centos7 mysql安装与用户设置
- 三网合一是指计算机网,什么是三站合一网站?什么是三网合一网站?
- 微信回应“取消两分钟内删除功能”;甲骨文裁撤北京中心;Redis 6.0.6 发布| 极客头条
- 五大步骤快速搭建个人网站
- LanguageTool性能简单测试分析
- shiny datatable child row:shiny表格二级子行的展开与折叠
- 目前最值得推荐的几款黑科技APP,快来收藏吧!
- android mp3 lrc歌词文件utf-8歌词显示为乱码,Android访问Tomcat错误以及mp3player项目乱码问题解决...
- JavaWeb 学习路线
- 设置谷歌浏览器深色黑色背景
- 揭秘0撸资金盘:区块链噱头,拉人头模式,数亿元收割
- 【python】迭代器与生成器到底是什么?看完你就知道
- 太帅了!钟楚曦这件老爹裤A到炸裂,一般人可穿不出这种范
- Arranging Coins 排列硬币
- 9.9 买礼物的艰辛 2719
- UE4官方的快捷键大全
- sw转urdf详细步骤
- 免费网络电话App 传统通信破冰者
- PHP中给数组中追加元素