窗口函数简介MySQL从8.0开始支持开窗函数,这个功能在大多商业数据库中早已支持,也叫分析函数。

开窗函数与分组聚合比较像,分组聚合是通过制定字段将数据分成多份,每一份执行聚合函数,每份数据返回一条结果。

开窗函数也是通过指定字段将数据分成多份,也就是多个窗口,对每个窗口的每一行执行函数,每个窗口返回等行数的结果。

窗口函数分为静态窗口和滑动窗口,静态窗口的大小是固定的,滑动窗口的大小可以根据设置进行变化,在当前窗口下生成子窗口。

概念比较难理解,看完代码在返回来看效果更好。

语法简介语法:函数名([参数]) over(partition by [分组字段] order by [排序字段] asc/desc rows/range between 起始位置 and 结束位置)

函数解读:函数分为两个部分,第一部分是函数名称,开窗函数的数量较少,只有11个窗口函数+聚合函数(所有聚合函数都可以用作开窗函数),根据函数性质,有的要写参数,有的不需要写参数;

第二部分是over语句,over()是必须要写的,里面有三个参数,都是非必须参数,根据需求选写:

1.第一个参数是 partition by +分组字段,将数据根据此字段分成多份,如果不加partition by参数,那会把整个数据当做一个窗口。

2.第二个参数是 order by +排序字段,每个窗口的数据要不要进行排序。

3.第三个参数 rows/range between 起始位置 and 结束位置,这个参数仅针对滑动窗口函数有用,是在当前窗口下分出更小的子窗口。其中起始位置和结束位置可写:current row 边界是当前行,unbounded preceding 边界是分区中的第一行,unbounded following 边界是分区中的最后一行,expr preceding 边界是当前行减去expr的值,expr following 边界是当前行加上expr的值。rows是基于行数,range是基于值的大小,到讲解到滑动窗口函数时再详细介绍。

静态窗口函数之排名函数 rank()、dense_rank()有成绩表sc,字段分别是学生编号s_id,课程编号c_id,成绩score

题目:按成绩从高到低进行排名

代码:select * ,rank() over(order by score desc) 名次 from sc;

代码解读:rank()是排名函数,不需要参数;over语句里面没有partition by参数,也就是整个数据视为一个窗口;因为rank函数没有参数,但需要指定按照那个字段进行排名,所以使用rank函数必须用order by参数,排序字段就是排名字段,针对分数做降序,就会按照成绩从高到低进行排名;rank函数属于静态窗口,第三个参数写不写没有任何用处。

结果如下,发现80分的同学都是并列第六,而并列后的下一位同学的名次是11名

但有时候,当出现名次并列时,下一个人的名次是连续的,只需要将rank()函数换成dense_rank(),其他都不需要更改。

代码:select * ,dense_rank() over(order by score desc) 名次 from sc;

结果如下:

题目:求每门课程的成绩排名

代码:select * ,rank() over(partition by c_id order by score desc) 名次 from sc;

代码解读:因为要求的是每门课程的排名,也就是课程1和课程2之间相互不影响,需要按照c_id将成绩表分成多份,每个课程是一个窗口,窗口内进行排序并返回排名,最后将多个窗口的结果再拼接再一起。

结果如下:

题目:查询每位学生的成绩总分并排名

代码:select s_id,sum(score) 总成绩,rank() over(order by sum(score) desc) 排名 from sc group by s_id;

代码解读:开窗函数的执行顺序是在group by之后的,所以是先针对s_id分组后聚合,得出每个学生的总成绩,之后再执行窗口函数。over语句没有partition by语句,没有进行分窗, 针对总成绩进行排序,根据每个学生的总成绩进行排名。

结果如下:

在一些问题上,使用窗口函数会使得代码非常简洁,后面会继续更新其他常用的窗口函数及案例,感谢观看,如果有用,帮忙给个赞和关注哈~

mysql8 rank_MySQL8.0窗口函数之排名函数(rank、dense_rank)的使用相关推荐

  1. MySQL8.0窗口函数之排名函数(rank、dense_rank)的使用

    转载 窗口函数简介 MySQL从8.0开始支持开窗函数,这个功能在大多商业数据库中早已支持,也叫分析函数. 开窗函数与分组聚合比较像,分组聚合是通过制定字段将数据分成多份,每一份执行聚合函数,每份数据 ...

  2. MYSQL实现排名函数RANK,DENSE_RANK和ROW_NUMBER

    文章目录 1. 排名分类 1.1 区别RANK,DENSE_RANK和ROW_NUMBER 1.2 分组排名 2. 准备数据 3. 不分组排名 3.1 连续排名 3.2 并列跳跃排名 3.3 并列连续 ...

  3. Oracle排名函数(Rank)实例详解

    这篇文章主要介绍了Oracle排名函数(Rank)实例详解,需要的朋友可以参考下 --已知:两种排名方式(分区和不分区):使用和不使用partition --两种计算方式(连续,不连续),对应函数:d ...

  4. mysql中的排名函数rank()、dense_rank()、row_number()

    排名函数rank().dense_rank().row_number()的比较 1.问题描述 在写LeetCode178. 分数排名时,它的要求是输出"无间隔"的分数排名,于是本文 ...

  5. oracle 四分位函数,Oracle分析函数四——函数RANK,DENSE_RANK,FIRST,LAST…

    Oracle 分析函数--函数RANK,DENSE_RANK,FIRST,LAST- RANK 功能描述:根据 ORDER BY 子句中表达式的值,从查询返回的每一行,计算它们与其它行的相对位置.组内 ...

  6. Oracle分析函数四——函数RANK,DENSE_RANK,FIRST,LAST…

    Oracle分析函数--函数RANK,DENSE_RANK,FIRST,LAST- RANK 功能描述:根据ORDER BY子句中表达式的值,从查询返回的每一行,计算它们与其它行的相对位置.组内的数据 ...

  7. hive窗口函数之排名函数row_number、rank和dense_rank

    文章目录 简单排名 分组排名 练习1-取前两名学生 练习2-连续签到次数 排名函数主要有row_number.rank和dense_rank. 简单排名 row_number是行号,不会重复,rank ...

  8. excel排名_WPS-Excel表格实用技巧——排位排名函数(RANK函数)的使用

    平时使用excel表格处理数据时经常会用到排序功能,一般使用"升序"和"降序"工具按钮就可以完成简单的排序任务,但是当我们遇到相同数值在总体中的排名时,简单的& ...

  9. 使用函数求余弦函数的近似值_WPS-Excel表格实用技巧-排名函数RANK函数的使用

    平时使用excel表格处理数据时经常会用到排序功能,一般使用"升序"和"降序"工具按钮就可以完成简单的排序任务,但是当我们遇到相同数值在总体中的排名时,简单的& ...

最新文章

  1. 10.23cron10.24chkconfig工具10.25systemd管理服务10.26unit
  2. 厉害的壁纸,亲测有效
  3. Forrester 2011年安全策略建议
  4. python实现小型搜索引擎设计_基于JAVA的中小型饭店餐饮管理系统的设计与实现...
  5. redis怎么确认启动成功_不懂分Redis?现在开始动手!
  6. win10专业版系统没有休眠选项如何解决?
  7. 20190616 IDEA-每次修改JS文件都需要重启Idea才能生效解决方法
  8. nodejs 中http请求头,响应头
  9. CentOS安装问题
  10. BertSum-基于BERT模型的抽取式文本摘要
  11. 分页插件pagehelper ,在sql server 中是怎么配置的
  12. 1. HTML DOM Document 对象
  13. python实现常见的整数进制、字符进制、ASCII码进制之间的转换
  14. 《计算机网络 第七版》读后感
  15. 实验:配置Trunk
  16. 网页资源不知道如何下载,我来教你
  17. by mysql 按每分钟group_MySQL group by 统计每5分钟数据量
  18. 湖北地图html代码,echarts全国省市地图代码
  19. 基因大数据的集成分析
  20. 黑马程序员_Java高新技术3(框架,JavaBeans与内省(Introspector)) - 伊秋

热门文章

  1. java Excel转Pdf
  2. 跳线架和配线架,二者你分得清吗?
  3. 【VS2017】【Windows SDK】【MSB803】找不到 Windows SDK 版本10.0.17134.0的解决办法
  4. 燃气 CAD 施工图入库 ArcGIS 系统求助
  5. 不念过往,不畏将来——告别曾经
  6. 文顶顶iOS开发博客链接整理及部分项目源代码下载
  7. numpy 小练习题(1)(附详细答案)
  8. googletest单元测试框架安装及使用
  9. tools.jar的位置
  10. Fuji FinePix S5Pro 全面介绍(转自作者-全钟海)