【MySQL】数据库函数通关教程下篇(窗口函数专题)(下)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 文章目录写在前面6 窗口函数6.1 窗口函数概述6.2 序号函数6.2.1 ROW_NUMBER()6.2.2 RANK()6.2.3 DENSE_RANK()6.3 开窗聚合函数6.4 分布函数6.4.1 CUME_DIST()6.4.2 PERCENT_RANK()6.5 前后函数-LAG与LEAD6.6 头尾函数写在最后


可以发现,当指定了排序方式,窗口则会调整为每组的当前行。比如,第一行的SUM为第一个人的成绩,第二行的SUM则为第一个人与第二个人成绩的和,以此类推… …

 如果希望对各分组中每行的前2行到后1行的数据进行计算,则可以使用下面的语句:

SELECT name,
       address,
       score,
       SUM(score) OVER (PARTITION BY address ORDER BY score rows BETWEEN 2 PRECEDING AND 1 FOLLOWING) AS SUM
FROM student


 下图结果中的373.5则为第三行的前两行、当前行与后一行的成绩之和:


6.4 分布函数

6.4.1 CUME_DIST()

🆔 介绍:

用途:分组内小于、等于当前 rank 值的行数/分组内的总行数;

应用场景:查询小于等于当前数据项的行数比例。

🐱 操作示例:

SELECT name,
       address,
       score,
       CUME_DIST() OVER (ORDER BY score) AS RESULT
FROM student

在下图中,成绩小于等于85的行数一共有3行,总行数为7行,因此result的值为3/7=0.42857… …



6.4.2 PERCENT_RANK()

🆔 介绍:


用途:每行按照公式(rank-1)/(rows-1)进行计算。其中,rank为RANK() 函数产生的序号,rows为当前窗口记录的总行数;

该方法不常用,简单了解即可。

🐱 操作示例:

SELECT name,
       address,
       score,
       RANK() OVER (ORDER BY score DESC) AS _rank,
       PERCENT_RANK() OVER (ORDER BY score DESC) AS _percent
FROM student


6.5 前后函数-LAG与LEAD

🆔 介绍:


用途:返回位于当前行的前 n 行(LAG(expr,n)) 或者后 n 行(LEAD(expr,n)) 的 expr 的值;

应用场景:查询前一位同学的成绩和当前同学成绩的差值

🐰 操作示例:

 在示例中使用LAG查询结果每行显示上一名同学的成绩,命名为 _LAG,如果没有上一行,则默认显示0:

SELECT name,
       address,
       score,
       LAG(score, 1, 0) OVER (ORDER BY score DESC) AS _LAG
FROM student


6.6 头尾函数

🆔 介绍:


用途:返回第一个(FIRST_VALUE(expr)) 或者最后一个 (LAST_VALUE(expr)) expr的值;

应用场景:截至当前,按照日期排序查询第一个生日的人的成绩和最后一个人的成绩;

🐰 操作示例:

 分别使用FIRST_VALUE与LAST_VALUE查询到目前为止第一个和最后一个生日人的成绩。

SELECT name,
       address,
       score,
       birth,
       FIRST_VALUE(score) OVER (ORDER BY birth) AS FIRST,
       LAST_VALUE(score) OVER (ORDER BY birth) AS LAST
FROM student

对于查询结果,我们关注FIRST与LAST两列。需要特别注意到目前为止的条件,即结果为到当前行第一个出生或者最后一个出生的成绩!

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
9天前
|
NoSQL Java 关系型数据库
Liunx部署java项目Tomcat、Redis、Mysql教程
本文详细介绍了如何在 Linux 服务器上安装和配置 Tomcat、MySQL 和 Redis,并部署 Java 项目。通过这些步骤,您可以搭建一个高效稳定的 Java 应用运行环境。希望本文能为您在实际操作中提供有价值的参考。
67 26
|
10天前
|
关系型数据库 MySQL 数据库
Python处理数据库:MySQL与SQLite详解 | python小知识
本文详细介绍了如何使用Python操作MySQL和SQLite数据库,包括安装必要的库、连接数据库、执行增删改查等基本操作,适合初学者快速上手。
75 15
|
3天前
|
SQL 关系型数据库 MySQL
数据库数据恢复—Mysql数据库表记录丢失的数据恢复方案
Mysql数据库故障: Mysql数据库表记录丢失。 Mysql数据库故障表现: 1、Mysql数据库表中无任何数据或只有部分数据。 2、客户端无法查询到完整的信息。
|
20天前
|
关系型数据库 MySQL Java
Servlet+MySQL增删改查 原文出自[易百教程] 转载请保留原文链接: https://www.yiibai.com/geek/1391
对于任何项目开发,创建,读取,更新和删除(CRUD)记录操作是应用程序的一个最重要部分。
57 20
|
10天前
|
关系型数据库 MySQL 数据库
数据库数据恢复—MYSQL数据库文件损坏的数据恢复案例
mysql数据库文件ibdata1、MYI、MYD损坏。 故障表现:1、数据库无法进行查询等操作;2、使用mysqlcheck和myisamchk无法修复数据库。
|
11天前
|
SQL 关系型数据库 MySQL
MySQL常见函数第二期,你都用过哪些呢 ?
本期介绍了20个常用的MySQL函数,涵盖日期处理(如CURDATE()、DATE_FORMAT())、数学运算(如ABS()、ROUND())、统计分析(如COUNT()、SUM())等,帮助提高SQL查询效率和数据处理能力。希望对大家的学习有所帮助。
55 7
|
13天前
|
关系型数据库 MySQL
MySQL常见函数第一期,你都用过哪些呢 ?
本期介绍10个常用的MySQL函数:字符串连接(CONCAT)、提取子字符串(SUBSTRING)、获取字符串长度(LENGTH)、转换大小写(UPPER、LOWER)、去除空格(TRIM)、替换字符串(REPLACE)、查找子字符串位置(INSTR)、带分隔符的字符串连接(CONCAT_WS)以及获取当前日期时间(NOW)。
53 8
|
14天前
|
数据采集 关系型数据库 MySQL
MySQL常用函数:IF、SUM等用法
本文介绍了MySQL中常用的IF、SUM等函数及其用法,通过具体示例展示了如何利用这些函数进行条件判断、数值计算以及复杂查询。同时,文章还提到了CASE WHEN语句和其他常用函数,如COUNT、AVG、MAX/MIN等,强调了它们在数据统计分析、数据清洗和报表生成中的重要性。
|
14天前
|
SQL 关系型数据库 MySQL
MySQL导入.sql文件后数据库乱码问题
本文分析了导入.sql文件后数据库备注出现乱码的原因,包括字符集不匹配、备注内容编码问题及MySQL版本或配置问题,并提供了详细的解决步骤,如检查和统一字符集设置、修改客户端连接方式、检查MySQL配置等,确保导入过程顺利。
|
18天前
|
关系型数据库 MySQL 数据处理
【MySQL】函数
MySQL 提供了丰富的函数集,涵盖字符串处理、数值运算、日期时间操作和聚合计算等多个方面。这些函数在日常数据库操作中极为重要,通过合理使用这些函数,可以大大提高数据处理和查询的效率。用户还可以通过自定义函数,扩展 MySQL 的功能以满足特定需求。
26 3