【MySQL进阶之路 | 基础篇】MySQL新特性 : 窗口函数

news2024/12/26 22:29:05

1. 前言

(1). MySQL8开始支持窗口函数. 其作用类似于在查询中对数据进行分组(GROUP BY),不同的是,分组操作会把分组的结果聚合成一条记录. 而窗口函数是将结果置于每一条数据记录中.

(2). 窗口函数还可以分为静态窗口函数和动态窗口函数.

  • 静态窗口函数的窗口大小是固定的,不会因为记录的不同而不同.
  • 动态窗口的窗口大小会随着记录的不同而变化.

(3). 窗口函数在整体上还可以分为序号函数,分布函数,前后函数,首尾函数和其他函数.

02b4204608884d49ba376024ada2c647.png

2. 窗口函数

(1). 语法结构

函数 OVER([PARTITION BY 字段名 ORDER BY 字段名 ASC|DESC])
  • OVER关键字指定窗口的范围. 如果可以省略后面的括号里的内容,则窗口包含WHERE子句符合条件的所有记录. 窗口函数会对于这些记录进行计算. 如果括号内的内容不为空,可以使用如下语法设置窗口.
  • 窗口名. 可以为窗口用AS关键字设置一个别名.
  • PARTITION BY : 分区,指定窗口函数按照哪些字段进行分区. 分区后,窗口函数在每个分区中分别计算.
  • ORDER BY : 指定窗口函数按照哪些字段进行排序. 执行排序操作使窗口函数按照排序后的数据记录的顺序编号.
  • FRAME : 为分区中的某个子集定义规则,可以用来作为滑动窗口使用.

(2). 准备工作

CREATE DATABASE mydbms4;

USE mydbms4;

CREATE TABLE goods(
id INT PRIMARY KEY AUTO_INCREMENT,
category_id INT,
category VARCHAR(15),
NAME VARCHAR(30),
price DECIMAL(10,2),
stock INT,
upper_time DATETIME);

INSERT INTO goods(category_id,category,NAME,price,stock,upper_time)
VALUES
(1, '女装/女士精品', 'T恤', 39.90, 1000, '2020-11-10 00:00:00'),
(1, '女装/女士精品', '连衣裙', 79.90, 2500, '2020-11-10 00:00:00'),
(1, '女装/女士精品', '卫衣', 89.90, 1500, '2020-11-10 00:00:00'),
(1, '女装/女士精品', '牛仔裤', 89.90, 3500, '2020-11-10 00:00:00'),
(1, '女装/女士精品', '百褶裙', 29.90, 500, '2020-11-10 00:00:00'),
(1, '女装/女士精品', '呢绒外套', 399.90, 1200, '2020-11-10 00:00:00'),
(2, '户外运动', '自行车', 399.90, 1000, '2020-11-10 00:00:00'),
(2, '户外运动', '山地自行车', 1399.90, 2500, '2020-11-10 00:00:00'),
(2, '户外运动', '登山杖', 59.90, 1500, '2020-11-10 00:00:00'),
(2, '户外运动', '骑行装备', 399.90, 3500, '2020-11-10 00:00:00'),
(2, '户外运动', '运动外套', 799.90, 500, '2020-11-10 00:00:00'),(2, '户外运动', '滑板', 499.90, 1200, '2020-11-10 00:00:00');

3. 序号函数

(1). ROW_NUMBER()函数

ROW_NUMBER函数能对数据的序号进行顺序显示.

SELECT ROW_NUMBER() OVER (PARTITION BY category_id 
ORDER BY price DESC) AS row_num, 
category,name,price,stock,upper_time
FROM goods;


1	女装/女士精品	呢绒外套	399.90	1200	2020-11-10 00:00:00
2	女装/女士精品	卫衣	89.90	1500	2020-11-10 00:00:00
3	女装/女士精品	牛仔裤	89.90	3500	2020-11-10 00:00:00
4	女装/女士精品	连衣裙	79.90	2500	2020-11-10 00:00:00
5	女装/女士精品	T恤	39.90	1000	2020-11-10 00:00:00
6	女装/女士精品	百褶裙	29.90	500	2020-11-10 00:00:00
1	户外运动	山地自行车	1399.90	2500	2020-11-10 00:00:00
2	户外运动	运动外套	799.90	500	2020-11-10 00:00:00
3	户外运动	滑板	499.90	1200	2020-11-10 00:00:00
4	户外运动	自行车	399.90	1000	2020-11-10 00:00:00
5	户外运动	骑行装备	399.90	3500	2020-11-10 00:00:00
6	户外运动	登山杖	59.90	1500	2020-11-10 00:00:00
  • 由查询结果可以知道,依据category_id将表中记录分为两个分区,窗口函数分别在每个分区进行计算. 并对表中记录进行顺序显示.

(2). RANK()函数

使用RANK函数能对序号进行并列排序,并且会跳过重复序号. 如1,1,3.

SELECT RANK() OVER (PARTITION BY category_id 
ORDER BY price DESC) AS row_num, 
category,name,price,stock,upper_time
FROM goods;

93c62902194142fd89df014e15a555ea.png

(3). DENSE_RANK()函数

使用该函数进行并列排序,并且不会跳过重复序号. 比如1,1,2.

SELECT DENSE_RANK() OVER (PARTITION BY category_id 
ORDER BY price DESC) AS row_num, 
category,name,price,stock,upper_time
FROM goods;

68f4684e1df249c1a67efbeff91129e5.png

4. 分布函数

(1). PERCENT_RANK()函数

该函数是百分比函数,其按照(rank-1)/(rows-1)进行计算.

rank是RANK()函数计算的序号,row是当前窗口的总记录数.

SELECT PERCENT_RANK() OVER (PARTITION BY category_id 
ORDER BY price DESC) AS row_num, 
category,name,price,stock,upper_time
FROM goods;

97856f55e30a4eb5992a4134381157b9.png

(2). CUME_DIST()函数

CUME_DIST函数主要用于查询小于或等于某个值的比例.

查询当前表<或=当前价格的比例.

SELECT CUME_DIST() OVER (PARTITION BY category_id 
ORDER BY price) AS row_num, 
category,name,price,stock,upper_time
FROM goods;

1789f41dcd8542e18e790af5eb0ab3d7.png

5. 前后函数

(1). LAG(expr,n)函数

该函数返回当前行的前n个行的expr的值.

SELECT LAG(price, 1) OVER (PARTITION BY category_id 
ORDER BY price) AS row_num, 
category,name,price,stock,upper_time
FROM goods;

7d66079a3bff487c8596fe94fb97fcad.png

​(2). LEAD(expr,n)函数

该函数返回当前行的后n个行的expr的值.

​6. 首尾函数

(1). FIRST_VALUE(expr)

该函数返回expr字段第一个expr的值.

SELECT FIRST_VALUE(price) OVER (PARTITION BY category_id 
ORDER BY price) AS row_num, 
category,name,price,stock,upper_time
FROM goods;

70f5b77348f74c5b846c67d94c16599b.png

(2). LAST_VALUE(expr)函数

该函数用来返回expr字段最后一个expr的值.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1700369.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

堆(建堆算法,堆排序)

目录 一.什么是堆? 1.堆 2.堆的储存 二.堆结构的创建 1.头文件的声明: 2.向上调整 3.向下调整 4.源码: 三.建堆算法 1.向上建堆法 2.向下建堆法 四.堆排序 五.在文件中Top出最小的K个数 一.什么是堆? 1.堆 堆就…

AIGC产业链上下游解析及常见名词

文章目录 AIGC上游产业链 - 基础层AIGC中游产业链 - 大模型层与工具层AIGC下游产业链 - 应用层AIGC产业链常见的名词表 在上一章节为大家介绍了 “大模型的不足与解决方案” ,这一小节呢为大家针对AIGC的相关产业进行一个拆解,以及相关的一些专业名词做出…

RK3568笔记二十六:音频应用

若该文为原创文章,转载请注明原文出处。 一、介绍 音频是我们最常用到的功能,音频也是 linux 和安卓的重点应用场合。 测试使用的是ATK-DLR3568板子,板载外挂RK809 CODEC芯片,RK官方驱动是写好的,不用在自己重新写。…

C语言 | Leetcode C语言题解之第113题路径总和II

题目: 题解: int** ret; int retSize; int* retColSize;int* path; int pathSize;typedef struct {struct TreeNode* key;struct TreeNode* val;UT_hash_handle hh; } hashTable;hashTable* parent;void insertHashTable(struct TreeNode* x, struct Tr…

第八篇【传奇开心果系列】Python微项目技术点案例示例:以微项目开发为案例,深度解读Dearpygui 编写图形化界面桌面程序的优势

传奇开心果博文系列 系列博文目录Python微项目技术点案例示例系列 博文目录前言一、开发图形化界面桌面程序的优势介绍二、跨平台特性示例代码和解析三、高性能特性示例代码和解析四、简单易用特性示例代码和解析五、扩展性强示例代码和解析六、现代化设计示例代码和解析七、知…

【PB案例学习笔记】-09滚动条使用

写在前面 这是PB案例学习笔记系列文章的第8篇,该系列文章适合具有一定PB基础的读者。 通过一个个由浅入深的编程实战案例学习,提高编程技巧,以保证小伙伴们能应付公司的各种开发需求。 文章中设计到的源码,小凡都上传到了gitee…

如何使用KNN

导入文件和库 加载数据集、拆分数据集 训练模型 预测 打印结果

用C#调用SAP 的WebServices接口

文章目录 用C#调用SAP 的WebServices接口创建C#的项目添加窗体添加引用在表单的装载事件里编写代码运行结果SAP的RFC函数 用C#调用SAP 的WebServices接口 创建C#的项目 添加窗体 添加引用 在表单的装载事件里编写代码 using System; using System.Collections.Generic; using …

MicroLED:苹果对知识产权的影响

Yole的洞察揭示,MicroLED IP在经历了七年的爆炸式增长后,已然屹立于行业之巅。苹果公司,作为微LED领域的先行者,早在2014年便敏锐地捕捉到Luxvue这家初创公司的潜力,将其纳入麾下,引发了业界的广泛关注。然…

204页 | MES项目需求案例方案:效率+精细化+品质+数据互联(免费下载)

【1】关注本公众号,转发当前文章到微信朋友圈 【2】私信发送 MES项目需求案例方案 【3】获取本方案PDF下载链接,直接下载即可。 如需下载本方案PPT/WORD原格式,请加入微信扫描以下方案驿站知识星球,获取上万份PPT/WORD解决方案&…

上位机图像处理和嵌入式模块部署(f103 mcu运行freertos)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 mcu一般有两个用途,一个是控制,一个是非控制。控制类的应用一般要求实时性比较高,什么时候做什么,都是有严格的时间要求的。而非控制类的应用,则要求实现尽可能多的功能,比如…

如何调用通义千问大模型API

目录 登录阿里云 大模型服务平台百炼 登录控制台 QWen Long QWen 通义千问开源系列 大语言模型 OpenAI接口兼容 登录阿里云 阿里云-计算,为了无法计算的价值 大模型服务平台百炼 降价信息: 登录控制台 右上角取得API key 创建Key QWen Long qw…

03.tomcat环境搭建

上传软件包 JDK #man bash #PATH 存放命令的路径 ## ls #加入环境变量&#xff0c;注意&#xff1a;EOF的单引号的意思就是追加到文件中的内容带有变量的不做解析&#xff0c;否则会被解析 cat >>/etc/profile <<EOF export JAVA_HOME/application/jdk export PAT…

修改元组元素

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 场景模拟&#xff1a;伊米咖啡馆&#xff0c;由于麝香猫咖啡需求量较大&#xff0c;库存不足&#xff0c;店长想把它换成拿铁咖啡。 实例08 将麝香猫…

Python 开心消消乐

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

硬盘录像机DVR如何连接到外网的视频监控接入网关(国标网关)

目录 一、要求 二、工作准备 三、接入 1、查看SIP服务器ID号和相关国标对接参数&#xff0c;如下&#xff1a; 2、DVR国标参数配置 3、进行连接 &#xff08;1&#xff09;设备接入 &#xff08;2&#xff09;配置通道 &#xff08;3&#xff09;通道接入 &#xff0…

蓝桥杯算法心得——李白打酒(加强版)

大家好&#xff0c;我是晴天学长&#xff0c;记忆化搜索&#xff0c;找到技巧非常重要&#xff0c;需要的小伙伴可以关注支持一下哦&#xff01;后续会继续更新的。&#x1f4aa;&#x1f4aa;&#x1f4aa; 2) .算法思路 1.memo三维表示记录的结果 3&#xff09;.算法步骤 1…

[ FreeRTOS 基础知识] RTOS 背景介绍

文章目录 RTOS简介IOTOSFreertos简介RTOS划分 RTOS简介 &#xff08;1&#xff09;实时操作系统&#xff0c;本用于追求实时性的嵌入式系统。 典型&#xff1a;ucos、uclinux、vxworks &#xff08;实时性的指当事件产生的时候&#xff0c;需要花多久的时间做出响应。&#xf…

俄罗斯半导体领域迈出坚实步伐:首台光刻机诞生,目标直指7纳米工艺

近日&#xff0c;国外媒体纷纷报道&#xff0c;俄罗斯在半导体技术领域取得了重要突破&#xff0c;首台光刻机已经制造完成并正在进行严格的测试阶段。这一里程碑式的事件标志着俄罗斯在自主发展半导体技术的道路上迈出了坚实的一步。 据俄罗斯联邦工业和贸易部副部长瓦西里-什…

【电源专题】功率电感器啸叫原因及典型案例

啸叫产生的原因 声波是在空气中传播的弹性波,人的可听到的频率范围大约20~20kHz。在DC-DC转换器的功率电感器中,当流过人耳可听范围频率的交流电流以及脉冲波时,电感器主体会发生振动,该现象称为"线圈噪音",有时也称为啸叫。 啸叫一般是由电感器产生,…