热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

数据库技术:MySQL数据库基础篇SQL窗口函数示例解析教程

目录本文简介正文介绍聚合函数+over()排序函数+over()ntile()函数+over()偏移函数+over()本文简介前段时间,黄同学写了一篇《mysql窗
目录
  • 数据库技术:MySQL数据库基础篇SQL窗口函数示例解析教程简介
  • 正文介绍
  • 聚合函数 + over()
  • 排序函数 + over()
  • ntile()函数 + over()
  • 偏移函数 + over()

数据库技术:MySQL数据库基础篇SQL窗口函数示例解析教程简介

前段时间,黄同学写了一篇《mysql窗口实战》文章(文章如下),但是里面大多数是以实战练习为主,没有做详细的解释。

传送门:mysql实战窗口函数sql分析班级学生考试成绩及生活消费

于是,私信了月牙美女,看看她能否写一篇《窗口函数基础篇》,正好和之前那篇文章配套。这不,很快她就写好了,今天就给大家做一个分享,旨在和大家交流学习哦!

下面是月牙的玩笑简介,附带大图一张哦。

正文介绍

窗口函数,也被称为 “开窗函数”,mysql8.0以后,就可以使用这些函数了。

我们在力扣刷题的时候,不难发现,比较困难的题目经常会涉及到窗口函数的应用,可以说窗口函数,是检验我们的sql水平是否到达熟练水平的一个标尺。

窗口函数的格式为: 聚合函数+over()

窗口是描述over()括号内划定的内容,这个内容就是窗口函数的作用域,即操作的数据都在over()的范围内。

对于窗口函数,我个人的理解是给源数据开一扇可以滑动的窗口,在窗口移动的时候可以对其中的数据进行附加计算,如移动平均、分组排序等,窗口可以是一行多行甚至是所有行。

窗口函数,还可以对多组数据进行同步排序、聚合等运算,针对group by子句或where处理后的结果进行操作,只能写入select子句里。

灵魂画手上线,用excel简单做了个简易版的窗口函数的演示图:

MySQL数据库基础篇SQL窗口函数示例解析教程

聚合函数 + over()

基本语法:

sum/avg(被加工的字段名) over(partition by 分组的字段名 order by 排序的字段名 rows between … and …)

含义: 表示用partition by分组后针对每个组别进行求和或者求均值。

  --包括本行以内和前3行:rows between 6 preceding and current row  --包括本行以内和后3行:rows between current row and 3 following  --包括本行和之前所有的行:rows between unbounded preceding and current row  --包括本行和之后所有的行:rows between current row and unbounded following  --从前3行到下1行(总共包含5行数据):rows between 3 preceding and 1 following  

还有一些其它的聚合函数,例如max、min、count,它们的语法结构都类似。

排序函数 + over()

row_number()、rank()、dense_rank()这三个函数,都是对select查询到的结果进行排序,我们来看看这三者的区别。

row_number(): 为不重复的连续排序,从1开始,为查询到的数据依次生成不重复的序号进行排序

基本语法——row_number() over(order by 需要排序的字段asc/desc);

rank(): 为跳跃排序,结果相同的两个数据并列,为下一个数据空出所占的名次,即相同排名会占位

基本语法——rank() over(order by 需要排序的字段 asc/desc);

dense_rank(): 为有重复的连续排序,结果相同的两个数据并列,不为下一个数据空出所占的名次,即相同排名不占位

基本语法——dense_rank() over(order by 需要排序的字段 asc/desc);

我们用一张图来表示这三者间的关系:

MySQL数据库基础篇SQL窗口函数示例解析教程

ntile()函数 + over()

基本语法: ntile(n) over(partition by…order by…)其中n表示被切分的段数。

ntile(n)用于将分组数据平均切分成n块,如果切分的每组数量不均等,则第一组分得的数据更多。

ntile()函数通常用于比如求年级前10%成绩的学生,则n取值为10,用where筛选出第一组的数据。

偏移函数 + over()

基本语法1:前n行:lead(str, n, default) over(partition by …order by …)

基本语法2:后n行:lag(str, n, default) over(partition by …order by …)

str表示字段名,n表示前/后n行数据,默认值为1,default表示如果取值范围已经超过整个表的返回值,可以不填,不填默认返回n/a。

偏移函数,用于取出同一字段的前n行数据或后n行数据,作为单独的列,这里需要特别注意一下的是,lead代表前n行,lag代表后n行。

以上就是mysql数据库基础篇窗口函数示例解析教程的详细内容,更多关于mysql窗口函数基础的资料请关注<编程笔记>其它相关文章!

需要了解更多数据库技术:MySQL数据库基础篇SQL窗口函数示例解析教程,都可以关注数据库技术分享栏目—编程笔记


推荐阅读
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • 本文详细介绍了MysqlDump和mysqldump进行全库备份的相关知识,包括备份命令的使用方法、my.cnf配置文件的设置、binlog日志的位置指定、增量恢复的方式以及适用于innodb引擎和myisam引擎的备份方法。对于需要进行数据库备份的用户来说,本文提供了一些有价值的参考内容。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 本文由编程笔记小编整理,介绍了PHP中的MySQL函数库及其常用函数,包括mysql_connect、mysql_error、mysql_select_db、mysql_query、mysql_affected_row、mysql_close等。希望对读者有一定的参考价值。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • Oracle分析函数first_value()和last_value()的用法及原理
    本文介绍了Oracle分析函数first_value()和last_value()的用法和原理,以及在查询销售记录日期和部门中的应用。通过示例和解释,详细说明了first_value()和last_value()的功能和不同之处。同时,对于last_value()的结果出现不一样的情况进行了解释,并提供了理解last_value()默认统计范围的方法。该文对于使用Oracle分析函数的开发人员和数据库管理员具有参考价值。 ... [详细]
  • 解决VS写C#项目导入MySQL数据源报错“You have a usable connection already”问题的正确方法
    本文介绍了在VS写C#项目导入MySQL数据源时出现报错“You have a usable connection already”的问题,并给出了正确的解决方法。详细描述了问题的出现情况和报错信息,并提供了解决该问题的步骤和注意事项。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • ALTERTABLE通过更改、添加、除去列和约束,或者通过启用或禁用约束和触发器来更改表的定义。语法ALTERTABLEtable{[ALTERCOLUMNcolu ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
author-avatar
golanger
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有