MySQL常用窗口函数总和

news2024/11/14 21:50:41

在 MySQL 中,窗口函数是一类用于在查询结果集中计算值的函数,允许用户根据数据行进行聚合或排序操作,同时保留行的详细信息。窗口函数在分析数据时非常有用,因为它们允许您在不缩小结果集的情况下对数据进行复杂的计算。

常见的窗口函数包括:

  1. ROW_NUMBER()
  2. RANK()
  3. DENSE_RANK()
  4. NTILE(n)
  5. LAG()
  6. LEAD()
  7. FIRST_VALUE()
  8. LAST_VALUE()
  9. SUM(), AVG(), COUNT(), MIN(), MAX()(这些聚合函数在窗口函数上下文中也可以使用)

窗口函数的基本语法:

<窗口函数> OVER (
  [PARTITION BY <分组列>] 
  [ORDER BY <排序列>] 
  [ROWS or RANGE <窗口框架>]
)
  • PARTITION BY:用于将数据划分成不同的组(分区),窗口函数将在每个分区内进行计算。
  • ORDER BY:用于指定窗口函数计算的顺序。
  • ROWS or RANGE:定义了窗口框架,指定计算窗口的大小。

下面是进行演示的表数据

具体的窗口函数及示例:

1. ROW_NUMBER()

    • 用法:返回分区中每行的唯一行号。
    • 示例:
SELECT
    name,
    salary,
    ROW_NUMBER() OVER (ORDER BY salary DESC) AS row_num
FROM
    employee;

这将根据薪水的降序为每个员工分配一个唯一的行号。(可用于排名的场景,排序数重复时不重复排名)

2. RANK()

    • 用法:返回当前行在其分区中的排名,排名相同的行将具有相同的排名号,但排名之后的行的排名号会跳过。也就是不紧凑。
    • 示例:
SELECT 
    name, 
    salary, 
    RANK() OVER (ORDER BY salary DESC) AS rank
FROM 
    employee;

如果两名员工的薪水相同,他们将获得相同的排名,但下一个员工的排名将跳过一个数字。

3. DENSE_RANK()

    • 用法:类似于 RANK(),但没有跳过排名编号。
    • 示例:
SELECT 
    name, 
    salary, 
    DENSE_RANK() OVER (ORDER BY salary DESC) AS dense_rank
FROM 
    employee;

这会给排名相同的行相同的编号,并且不会跳过接下来的排名。

4. NTILE(n)

    • 用法:将结果集划分为指定数量的桶,返回当前行属于哪个桶。NTILE(int n)
    • 示例:
SELECT 
    name, 
    salary, 
    NTILE(4) OVER (ORDER BY salary DESC) AS quartile
FROM 
    employee;

这会将员工划分为四个组,并根据薪水的降序将每个员工分配到一个组。排名靠前的优先分大组。

5. LAG(n)

    • 用法:获取当前行的前n行的值。LAG(column,n);
    • 示例:
SELECT 
    name, 
    salary, 
    LAG(salary, 1) OVER (ORDER BY salary DESC) AS prev_salary
FROM 
    employee;

这会返回当前行的前一行的薪水。

6. LEAD(n)

    • 用法:获取当前行的后n行的值。
    • 示例:
SELECT 
    name, 
    salary, 
    LEAD(salary, 1) OVER (ORDER BY salary DESC) AS next_salary
FROM 
    employee;

这会返回当前行的后一行的薪水。

7. FIRST_VALUE()

    • 用法:返回窗口中第一个值。
    • 示例:
SELECT 
    name, 
    salary, 
    FIRST_VALUE(salary) OVER (ORDER BY salary DESC) AS first_salary
FROM 
    employee;

这会返回窗口中按薪水降序排列的第一个薪水值。

8. LAST_VALUE()

    • 用法:返回窗口中最后一个值。
    • 示例:
SELECT 
    name, 
    salary, 
    LAST_VALUE(salary) OVER (ORDER BY salary DESC) AS last_salary
FROM 
    employee;

这会返回窗口中按薪水降序排列的最后一个薪水值。

9. SUM(), AVG(), COUNT(), MIN(), MAX()(作为窗口函数)

    • 用法:可以在窗口函数上下文中使用这些聚合函数。
    • 示例:
SELECT 
    name, 
    salary, 
    SUM(salary) OVER (PARTITION BY department ORDER BY salary DESC) AS running_total
FROM 
    employee;

这将计算每个部门的薪水累积和。每个部门的员工按照salary降序排序。

总结:

窗口函数提供了强大的分析能力,允许在不改变结果集的情况下执行复杂的计算和聚合操作。通过适当使用窗口函数,可以轻松实现排名、运行总和、前后比较等常见的分析需求。

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

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

相关文章

【文献及模型、制图分享】县域城乡融合发展对乡村旅游地实现共同富裕的影响机制——以长三角地区60个典型县为例

文献介绍 乡村旅游地是推动城乡融合、实现共同富裕的关键区域&#xff0c;精准把握县域城乡融合发展多维特征&#xff0c;系统解析其促进乡村旅游地共同富裕的机制&#xff0c;有助于丰富新时代城乡共富理论体系。基于共生理论&#xff0c;构建“共生单元—共生环境—共生结果…

linux~~目录结构远程登录教程(xshell+xftp)

目录 1.目录结构 2.远程登录xshell 2.1所需工具 2.2了解虚拟机IP 2.3查看是否正常连接 2.4xshell进行连接 3.文件传输xftp7 3.1xftp6安装 3.2相关设置 3.3效果展示 3.4文件之间的传输过程 1.目录结构 bin目录里面主要存放这个我们经常使用的指令&#xff0c;例如这个…

PointNet++改进策略 :模块改进 | PAConv,位置自适应卷积提升精度

题目&#xff1a;PAConv: Position Adaptive Convolution with Dynamic Kernel Assembling on Point Clouds来源&#xff1a;CVPR2021机构&#xff1a;香港大学论文&#xff1a;https://arxiv.org/abs/2103.14635代码&#xff1a;https://github.com/CVMI-Lab/PAConv 前言 PA…

从八股文到奇怪的缓存一致性问题

本文是最近看阿里云开发者的一遍奇怪的缓存一致性问题的总结与心得&#xff0c;原文放在文章末尾 缓存穿透、缓存击穿、缓存雪崩 缓存穿透、缓存击穿和缓存雪崩都是系统中可能遇到的问题&#xff0c;特别在高并发场景下。 缓存穿透 与后两者不同&#xff0c;缓存穿透是查询不…

10.10 层次化网络模型和综合布线系统

层次化网络模型 综合布线系统 真题

前端登录鉴权——以若依Ruoyi前后端分离项目为例解读

权限模型 Ruoyi框架学习——权限管理_若依框架权限-CSDN博客 用户-角色-菜单&#xff08;User-Role-Menu&#xff09;模型是一种常用于权限管理的设计模式&#xff0c;用于实现系统中的用户权限控制。该模型主要包含以下几个要素&#xff1a; 用户&#xff08;User&#xff09;…

基于微信的热门景点推荐小程序的设计与实现(论文+源码)_kaic

摘 要 近些年来互联网迅速发展人们生活水平也稳步提升&#xff0c;人们也越来越热衷于旅游来提高生活品质。互联网的应用与发展也使得人们获取旅游信息的方法也更加丰富&#xff0c;以前的景点推荐系统现在已经不足以满足用户的要求了&#xff0c;也不能满足不同用户自身的个…

Leetcode—72. 编辑距离【中等】

2024每日刷题&#xff08;158&#xff09; Leetcode—72. 编辑距离 动态规划算法思想 实现代码 class Solution { public:int minDistance(string word1, string word2) {const int m word1.length();const int n word2.length();vector<vector<int>> dp(n 1,…

Multi-Mode DOA Estimation AND Relax Super Resolution DOA

之前看到加特兰的新品发布会上&#xff0c;PPT写的一些算法信号处理流程图&#xff0c;这里记录学习一下自己的思考&#xff1a; 原始数据采样数据预处理距离维FFT通道间DDMA数据分离非相干累计RV-MAP coarse-cfar fine CFAR(multi-Mode DOA Estimation): 舱内的CPD信号处理流…

分支线定向耦合器宽带化设计和ADS仿真

分支线定向耦合器宽带化设计和ADS仿真 工程下载链接&#xff1a;分支线定向耦合器宽带化设计和ADS仿真-ADS工程文件 之前经常分析分支线定向耦合器&#xff0c;例如在15、ADS使用记录之耦合器设计和基于AWR的微带线分支线耦合器设计-从原理到版图中都有涉及&#xff0c;但是由…

Axure中继器动态数据图表制作

在Axure RP中&#xff0c;中继器&#xff08;Repeater&#xff09;是一个非常强大的工具&#xff0c;它允许设计者动态地展示和交互数据&#xff0c;进而创建各种复杂的数据可视化图表&#xff0c;如柱状图、条形图、堆叠图、散点图和对比图。以下将详细介绍如何使用中继器来设…

solidworks模型导出urdf(超详细)

目录 写在前面的话1 solidworks 文件2 安装sw2urdf插件3 完整步骤3.1 设置基准轴3.2 设置点3.3 设置坐标轴3.4 设置sw2urdf参数3.5 导出可能的问题3.6 ros2 编译3.7 成功结果画面 写在前面的话 刚进组1个月&#xff0c;我的博士研究方向是自动驾驶&#xff0c;还没入门&#x…

火山引擎携手Keep,让线上健身更快更稳

今年年初&#xff0c;一部《热辣滚烫》又掀起了健身塑型风潮。作为健身领域的佼佼者&#xff0c;Keep 为用户提供全面的健身方案&#xff0c;以帮助用户实现健身目标。随着短视频运动的流行&#xff0c;Keep 覆盖的运动品类超过60类&#xff0c;同时不断尝试直播等新的内容承载…

Oceanbase 透明加密TDE

官方文档&#xff1a;数据库透明加密概述-V4.3.2-OceanBase 数据库文档-分布式数据库使用文档 OceanBase 数据库社区版暂不支持数据透明加密。 数据存储加密是指对数据和 Clog 等保存在磁盘中的数据进行无感知的加密&#xff0c;即透明加密&#xff08;简称 TDE&#xff09;。…

【时时三省】(C语言基础)指针进阶 例题

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ----CSDN 时时三省 字符数组例题&#xff1a; arr后面放了六个字符 所以这个数组的元素个数就是6 第一个arr 因为他计算的是一整个数组的大小 就是打印6 第二个arr0 arr没有单独放在它的内部 所以它计算的就是…

flunet瞬态处理时均问题

fluent处理时均问题 最近遇到个同学&#xff0c;处理心脏跳动的时均问题&#xff0c;由于仅想取部分稳定时间段的时均数据&#xff0c;fluent的自动采样仅能对全部时间做处理&#xff0c;就存在问题了&#xff0c;网上看到两篇很详细的文章&#xff0c;记录下。 具体网址&…

Docker Elasticsearch安装ik分词插件教程

本章教程在通过Docker 安装Elasticsearch,并安装ik分词插件。本文的重点是安装ik分词插件。 一、安装Elasticsearch 安装教程以前写过,参考:https://blog.csdn.net/qq_19309473/article/details/140725121 安装之后,通过http://ip:9200,可以访问,就表示安装成功。 二、安装…

[python]socket之网络编程基础知识

1.三要素介绍: ip地址:设备在网络内的标识,分为ipv4和ipv6 端口号:软件(程序)在设备上的唯一标识.0-65535,其中0-1024为知名端口号,程序开发中最好不要使用 协议:数据发送的规则,有TCP和UDP 等 ip地址详解: 简单来说主要分为 IpV4, IpV6 IpV4: 采用4个字节, 十进制的形式来…

DSP基本名词术语及其关系

前言 信号处理是现代科技和工程领域中一个重要的分支&#xff0c;涉及对各种信号进行采集、传输、处理和分析的一系列方法和技术。其核心概念包括信号、系统、线性系统、时域与频域、稳定性和稳定性等。信号处理技术主要用于对模数转换后和数模转换前的数字信号进行处理&#x…

递归算法专题——真正理解递归和正确使用递归力扣实战应用

目录 1、使用递归 1.1 如何理解递归 1.2 如何写好一个递归算法 2、 算法应用【leetcode】 2.1 题一&#xff1a;汉诺塔问题【面试题】 2.1.1 算法原理 2.1.2 算法代码 2.2 题二&#xff1a;合并两个有序链表 2.2.1 算法原理 2.2.2 算法代码 2.3 题三&#xff1a;反转…