MySQL常用窗口函数

news2025/1/18 6:15:01

1、窗口函数概念

窗口的概念非常重要,它可以理解为记录集合,窗口函数也就是在满足某种条件的记录集合上执行的特殊函数对于每条记录都要在此窗口内执行函数,有的函数随着记录不同,窗口大小都是固定的,这种属于静态窗口;有的函数则相反,不同的记录对应着不同的窗口,这种动态变化的窗口叫滑动窗口。简单的说窗口函数就是对于查询的每一行,都使用与该行相关的行进行计算。

窗口函数也叫OLAP函数(Online Analytical Processing,联机分析处理),可以对数据进行实时分析处理。窗口函数和group by有类似之处,其区别在于窗口会对每个分组之后的数据进行分别操作,而group by一般对分组之后的函数使用聚集函数汇总。

2.窗口函数和普通聚合函数的区别

①聚合函数是将多条记录聚合为一条;窗口函数是每条记录都会执行,有几条记录执行完还是几条。

②聚合函数也可以用于窗口函数。

3、窗口函数用法

<窗口函数> over (partition by <用于分组的列名> order by <用于排序的列名>)

<窗口函数> 的位置,可以放以下两种函数:
1) 专用窗口函数,包括后面要讲到的 rank, dense_rank, row_number 等专用窗口函数。
2) 聚合函数,如 sum, avg, count, max, min 等

需要强调的一点是:窗口函数是对 where 或者 group by 子句处理后的结果进行操作,所以窗口函数原则上只能写在 select 子句中。 

MySQL常用窗口函数

No名称描述
1CUME_DIST()累积分配值
2PERCENT_RANK()排名值的百分比
3FIRST_VALUE()指定区间范围内的第一行的值
4LAG()取排在当前行之前的值
5LAST_VALUE() 指定区间范围内的最后一行的值
6LEAD()取排在当前行之后的值
7NTH_VALUE()指定区间范围内第N行的值
8NTILE()将数据分到N个桶,当前行所在的桶号
9DENSE_RANK()当前行在其分区中的排名,稠密排序
10RANK()当前行在其分区中的排名,稀疏排序
11ROW_NUMBER()分区内当前行的行号

下面我们通过具体的表来验证各个窗口函数的区别及效果 

Create table If Not Exists Employee (id int, name varchar(255), salary int, departmentId int)
Create table If Not Exists Department (id int, name varchar(255))
Truncate table Employee
insert into Employee (id, name, salary, departmentId) values ('1', 'Joe', '85000', '1')
insert into Employee (id, name, salary, departmentId) values ('2', 'Henry', '80000', '2')
insert into Employee (id, name, salary, departmentId) values ('3', 'Sam', '60000', '2')
insert into Employee (id, name, salary, departmentId) values ('4', 'Max', '90000', '1')
insert into Employee (id, name, salary, departmentId) values ('5', 'Janet', '69000', '1')
insert into Employee (id, name, salary, departmentId) values ('6', 'Randy', '85000', '1')
insert into Employee (id, name, salary, departmentId) values ('7', 'Will', '70000', '1')
Truncate table Department
insert into Department (id, name) values ('1', 'IT')
insert into Department (id, name) values ('2', 'Sales')

 

1、row_number() over(partition by字段1 order by 字段2) 的结果是每一行记录生成一个序号,依次排序且排序的序号不会重复

SELECT 
     ROW_NUMBER() OVER (partition by DepartmentId order by Salary desc) AS ranking, 
     DepartmentId, Name, Salary
FROM employee

2、rank() over(partition by字段1 order by 字段2) 的结果会考虑排序字段值相同的情况,若排序字段的值相同则其序号是一样的,后续不同字段值的序号为(前一行序号+N,其中N为前一个字段值重复的行数),比如 1 1 3 4 4 4 7

SELECT 
     RANK() OVER (partition by DepartmentId order by Salary desc) AS ranking, 
     DepartmentId, Name, Salary
FROM employee

3、 dense_rank() over(partition by字段1 order by 字段2) 的结果也会考虑排序字段值相同的情况,即排序字段的值相同那么他们的序号是一样的,但是与rank() 的区别是后续不同字段值的序号为(前一行序号+1),比如 1 1 2 2 3 4 5

 

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

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

相关文章

c语言:枚举类型—enum

枚举类型一.常见形式二.枚举和宏定义三.枚举的意义四.插个小知识一.常见形式 这里举一个例子&#xff0c;我想要枚举颜色 注意一下细节&#xff0c;所有成员间用逗号隔开&#xff0c;最后一个成员后不加标点符号 这里看上去和定义结构体和联合体的样式一样&#xff0c;但其实前…

minio安装部署和minIO-Client的使用

minio安装部署和minIO-Client的使用 一、服务器安装minio 1.进行下载 下载地址&#xff1a; GNU/Linux https://dl.min.io/server/minio/release/linux-amd64/minio2.新建minio安装目录&#xff0c;执行如下命令 mkdir -p /home/minio/data把二进制文件上传到安装目录后&a…

【PAT甲级 - C++题解】1128 N Queens Puzzle

✍个人博客&#xff1a;https://blog.csdn.net/Newin2020?spm1011.2415.3001.5343 &#x1f4da;专栏地址&#xff1a;PAT题解集合 &#x1f4dd;原题地址&#xff1a; 题目详情 - 1128 N Queens Puzzle (pintia.cn) &#x1f511;中文翻译&#xff1a;皇后问题 &#x1f4e3;…

第9章 无线网络和移动网络

目录 9.1 无线局域网 WLAN 9.1.1 无线局域网的组成 1. 无线局域网 WLAN (Wireless Local Area Network) 2. IEEE 802.11 3. 移动自组网络 9.1.2 802.11 局域网的物理层 9.1.3 802.11 局域网的 MAC 层协议 1. CSMA/CA 协议 2. 时间间隔 DIFS 的重要性 3. MAC两个子层…

acwing基础课——Floyd

由数据范围反推算法复杂度以及算法内容 - AcWing 常用代码模板3——搜索与图论 - AcWing 基本思想&#xff1a; floyd算法的原理是基于动态规划的基础上实现的&#xff0c;因为是稠密图我们通过邻接矩阵来存储&#xff0c;我们将各点距离初始化为正无穷(该点到自己的距离为0)&…

软件测试基础理论体系学习8-什么是验收测试?验收测试的内容是什么?过程是什么?有什么测试策略?

8-什么是验收测试&#xff1f;验收测试的内容是什么&#xff1f;过程是什么&#xff1f;有什么测试策略&#xff1f;1 验收测试的主要内容1.1 简介和说明1.2 验收测试的目的1.3 验收测试的任务1.4 验收测试主要内容1.4.1 验收测试标准1.4.2 配置复审1.4.3 α、β测试2 验收测试…

基于intel低功耗平台边缘计算解决方案助力半导体设备升级

半导体芯片是现代电子领域的大脑。事实上&#xff0c;在通信、计算、零售、医疗保健和运输应用领域&#xff0c;半导体芯片为各种先进技术提供了基础。2020年全球半导体销售额增长6.5%&#xff0c;相关制造设备的生产需求也相应增加。 某业内日本半导体设备制造厂商&#xff0…

营销不知道怎么做,不妨试试社交新零售电商结合新型引流模式

大家好&#xff0c;我是林工&#xff0c;如今移动互联网的快速发展为社交媒体分销提供了生根发芽的土壤&#xff0c;人们不仅仅满足于单方面的购物消费&#xff0c;开始利用社交属性&#xff0c;出现了具有强大带货能力和分销能力的人群&#xff0c;也就是当时的代购和微商&…

BEVFormer-accelerate:基于EasyCV加速BEVFormer

作者&#xff1a;贺弘 夕陌 谦言 临在 导言 BEVFormer是一种纯视觉的自动驾驶感知算法&#xff0c;通过融合环视相机图像的空间和时序特征显式的生成具有强表征能力的BEV特征&#xff0c;并应用于下游3D检测、分割等任务&#xff0c;取得了SOTA的结果。我们在EasyCV开源框架&…

【MySQL自学之路】第3天——MySQL数据库服务的基本操作

目录 前言 数据库的初始化 添加环境变量 数据库配置文件的编写【my.ini】 初始化MySQL服务 MySQL服务操作 安装一个MySQL服务 删除一个MySQL服务 开启你的MySQL服务 关闭你的MySQL服务 查看电脑中存在的MySQL服务 其他操作 登录数据库 修改密码 登录跳过密码验证…

Hi3861开发遇到的小问题及解决方法和一些小技巧

开发过程中的学习 一、硬件支持开启&#xff08;替换文件&#xff09; &#x1f604; 在D:\ubuntu2004Harmony镜像中通过vscode 使用编译命令 python build.py wifiiot是存在一个小问题 No option ‘riscv32-unknown-elf-gcc_path’ in section: ndk’ ” 而在E:\鸿蒙资料\鸿蒙…

[附源码]Python计算机毕业设计儿童绘本租赁网站Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

基于jsp+mysql+ssm工程车辆租赁系统-计算机毕业设计

项目介绍 随着现代工程车租赁的快速发展&#xff0c;可以说工程车租赁已经逐渐成为现代工程车租赁过程中最为重要的部分之一。但是一直以来我国传统的工程车租赁并没有建立一套完善的行之有效的工程车租赁系统&#xff0c;传统的工程车租赁已经无法适应高速发展&#xff0c;无…

Idea制作docker镜像

一、配置docker远程访问 1.在linux系统中查找docker.service文件&#xff0c;使用命令&#xff1a;find / -name docker.service 2.编辑 /usr/lib/systemd/system/docker.service文件&#xff0c;在ExecStart/usr/bin/dockerd后面添加 -H tcp://0.0.0.0:2375 3.重新加载dock…

持续盈利背后,水滴“新增长”难寻?

配图来自Canva可画 近年来随着互联网红利消失&#xff0c;越来越多的互联网企业回归效益&#xff0c;开始将“降本增效”纳入了议事日程之中&#xff0c;这不仅体现在BAT等一众大厂的财报中&#xff0c;就连水滴等互联网领域的“后起之秀”也在争相效法。 作为过去几年有名的…

最受欢迎的工具-从burp到支付和暴破

文章目录一、封神台七1、认识burp2、功能3、burp字体设置4、尝试抓包/改包&#xff08;支付&#xff09;5、尝试抓包改包&#xff08;暴力破解&#xff09;一、封神台七 1、认识burp 浏览器和相关应用程序的中间拦截、修改、重放数据包的代理工具 2、功能 1、拦截本机8080端…

[译]Ceph性能优化之CPU核数对性能的影响 - Part 1

原文链接 知乎专栏: [译]Ceph性能优化之CPU核数对性能的影响 - Part 1 - 知乎 简介 Ceph在很多方面都做得很好&#xff0c;但从来没有人意识到它有极低的资源消耗。Ceph需要做一些工作来确保数据的一致性&#xff0c;以及如何将数据(PG)放到合适的位置。我们正在努力优化Cep…

制作一个简单HTML传统端午节日网页(HTML+CSS)

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

tensorflow学习笔记一

1、tensorflow中的数据类型 import tensorflow as tf import numpy as np# 张量可以是数字、列表、ndarray# 使用列表创建张量 print(tf.constant([2,3])) print(tf.constant([[2,3],[1,4]]))# tensorflow2 默认使用Eager动态图机制 print(type(tf.constant([[2,3],[1,4]])))# …

springcloud(gateway限流)

目录 1. 限流的使用场景2. gateway限流实现 2.1 前提&#xff1a;2.2 导入依赖包2.3 在项目配置文件中配置redis2.4 开发限流需要的Bean2.5 为服务配置限流参数2.6 压力测试3. 熔断 3.1 熔断的使用场景3.2 熔断配置 1. 限流的使用场景 为什么限流 限流就是限制流量&#xff0c…