开窗函数MYSQL

在MySQL中,开窗函数允许你对一组行执行计算,并返回每个行的计算结果。这些函数对于执行复杂的分析操作非常有用,比如计算移动平均值、累计总和、行排名等。以下是对MySQL中一些常用开窗函数的细致讲解:

### 1. ROW_NUMBER()
`ROW_NUMBER()`为结果集中的每行分配一个唯一的序号,序号的分配是根据`OVER()`子句中指定的排序顺序决定的。如果存在相同的行,则序号会跳过重复的行。

**示例**:
```sql
SELECT 
  employee_id,
  first_name,
  last_name,
  ROW_NUMBER() OVER (ORDER BY hire_date DESC) AS row_num
FROM 
  employees;
```
这个查询将根据`hire_date`降序排列员工,并为每个员工分配一个唯一的序号。

### 2. RANK() 和 DENSE_RANK()
`RANK()`和`DENSE_RANK()`用于对结果集中的行进行排名。`RANK()`在遇到并列排名时会跳过后续的序号(例如,如果两行并列第一,则下一个序号是第三),而`DENSE_RANK()`不会跳过,即使存在并列排名,序号也会连续。

**示例**:
```sql
SELECT 
  employee_id,
  salary,
  RANK() OVER (ORDER BY salary DESC) AS rank
FROM 
  employees;
```
这个查询将根据`salary`对员工进行排名。

### 3. NTILE()
`NTILE(n)`将结果集分为`n`个大致相等的组,并为每组分配一个组号。如果结果集中的行数不能被`n`整除,那么一些组将比其他组多一行。

**示例**:
```sql
SELECT 
  employee_id,
  salary,
  NTILE(4) OVER (ORDER BY salary DESC) AS quartile
FROM 
  employees;
```
这个查询将员工根据`salary`分为四个收入等级。

### 4. LEAD() 和 LAG()
`LEAD(column)`和`LAG(column)`允许你访问当前行之后的第n行(`LEAD`)或之前的第n行(`LAG`)的数据。如果不指定n,默认为1。

**示例**:
```sql
SELECT 
  current_salary,
  LEAD(current_salary) OVER (ORDER BY employee_id) AS next_salary
FROM 
  employees;
```
这个查询将返回每行的当前薪资和下一行的薪资。

### 5. SUM() OVER()
使用`SUM()`开窗函数可以计算从结果集的开始到当前行的累积总和。

**示例**:
```sql
SELECT 
  employee_id,
  salary,
  SUM(salary) OVER (ORDER BY hire_date) AS cumulative_salary
FROM 
  employees;
```
这个查询将计算从`employees`表中最早入职的员工到当前员工的累计薪资。

### 6. AVG() OVER()
`AVG()`开窗函数可以计算从结果集的开始到当前行的滑动平均值。

**示例**:
```sql
SELECT 
  employee_id,
  salary,
  AVG(salary) OVER (ORDER BY hire_date ROWS BETWEEN 5 PRECEDING AND CURRENT ROW) AS moving_avg
FROM 
  employees;
```
这个查询将计算基于最近6个员工(包括当前员工)的薪资滑动平均值。

### 7. FIRST_VALUE() 和 LAST_VALUE()
`FIRST_VALUE()`和`LAST_VALUE()`分别返回窗口内第一行和最后一行的数据。

**示例**:
```sql
SELECT 
  employee_id,
  hire_date,
  FIRST_VALUE(hire_date) OVER (PARTITION BY department_id ORDER BY hire_date) AS first_hire_date
FROM 
  employees;
```
这个查询将为每个部门返回最早的入职日期。

### 注意事项
- 开窗函数使用`PARTITION BY`子句来指定分组的列,这允许在每个分区内独立执行计算。
- `ROWS BETWEEN ... AND ...`允许你指定窗口的边界,例如`ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING`表示当前行的前一行和后一行。
- 开窗函数通常与`ORDER BY`子句结合使用,以定义计算的顺序。

开窗函数为MySQL提供了强大的数据分析能力,使得你可以在SQL查询中执行复杂的数据操作。

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

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

相关文章

LeetCode --- 132双周赛

题目列表 3174. 清除数字 3175. 找到连续赢 K 场比赛的第一位玩家 3176. 求出最长好子序列 I 3177. 求出最长好子序列 II 一、清理数字 这题直接根据题目,进行模拟即可,大体的思路是遍历字符串,遇到字母就加入答案,遇到数字就…

网络协议四

一、云中网络 物理机的劣势: 1)一旦需要扩容 CPU、内存、硬盘,都需要去机房手动弄,非常麻烦 2)采购的机器往往动不动几百 G 的内存,而每个应用往往可能只需要 4 核 8G 3)一台机器,…

怎么改变图片分辨率dpi数值?图片改分辨率的在线技巧

在上传图片的时候除了图片大小、尺寸等要求之外,修改图片分辨率也是比较常见的一个问题,需要将图片按照平台的要求修改完成后才可以正常使用。当遇到图片dpi的数值不满足使用需求的时候,有什么方法能够更加快捷的修改图片dpi呢?今…

从零开始利用MATLAB进行FPGA设计(七)固化程序

FPGA开发板:AX7020;Xilinx 公司的 Zynq7000 系列的芯片XC7Z020-2CLG400I,400引脚 FBGA 封装。 HARDWARE PLATFORM在2019以后的vivado中已经没有了。本期实际上已经与MATLAB无关,主要介绍通过VITIS等方法进行程序固化。 目录 ZY…

leetcode打卡#day50 188. 买卖股票的最佳时机 IV、 309. 买卖股票的最佳时机含冷冻期、714. 买卖股票的最佳时机含手续费

188. 买卖股票的最佳时机 IV class Solution { public:int maxProfit(int k, vector<int>& prices) {if (prices.size() 0) return 0;vector<vector<int>> dp(prices.size(), vector<int>(2 * k 1, 0));for (int j 1; j < 2 * k; j 2) {dp…

Github 2024-06-13 Go开源项目日报Top10

根据Github Trendings的统计,今日(2024-06-13统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Go项目10TypeScript项目1Shell项目1多存储文件列表/WebDAV程序 创建周期:1265 天开发语言:Go协议类型:GNU Affero General Public License v…

linux安装dgl

1.DGL官网、选择与自己cuda、python版本匹配的dgl的whl文件CUDA11.8、python10并下载 2.用pip install运行 pip install /home/u2023170749/download/dgl-2.2.0cu118-cp310-cp310-manylinux1_x86_64.whl

git提交错了?别慌,直接删除提交记录

git revert 和git reset &#xff01;这两个命令都有撤销操作的功能&#xff01;哪一个可以删除提提交记录&#xff1f;&#xff1f;&#xff1f; 使用git revert撤销提交 revert的英文释义是回复、恢复&#xff08;到原来的状态&#xff09; 作用 git revert 是 Git 中用于撤…

如何通过SOLIDWORKS教育版提高学生技能培养未来人才?

在当今这个科技日新月异的时代&#xff0c;掌握先进的数字化工具已经成为了一项需备的技能。作为一款功能强大的3D CAD软件&#xff0c;SOLIDWORKS教育版正是一个帮助学生提升技能、培养未来人才的重要工具。那么&#xff0c;如何通过SOLIDWORKS教育版提高学生技能呢&#xff1…

全方位·多层次·智能化,漫途水库大坝安全监测方案

党的十九届五中全会提出&#xff0c;到2025年前&#xff0c;完成新出现病险水库的除险加固&#xff0c;配套完善重点小型水库雨水情和安全监测设施&#xff0c;实现水库安全鉴定和除险加固常态化。 加快推进小型水库除险加固。加快构建气象卫星和测雨雷达、雨量站、水文站组成…

mysql定时任务事件清理单表数据

DELIMITER $$删除已有任务事件 DROP EVENT IF EXISTS del_message;创建事件 CREATE EVENT del_message表示创建时间定时周期&#xff0c;以及开始时间&#xff0c;该处表示从明天2点从开始&#xff0c;7天执行一次该任务 ON SCHEDULE EVERY 7 day STARTS date_add(date( ADD…

12306 火车票价格解析 (PHP 解析)

1. 从接口拿数据 日期 出发站 终点站 都填上 xxx/otn/leftTicketPrice/queryAllPublicPrice?leftTicketDTO.train_date2024-06-15&leftTicketDTO.from_stationBJP&leftTicketDTO.to_stationSJP&purpose_codesADULT 返回的数据是这样的 {"validateMess…

ASP.NET MVC企业级程序设计(查,删,展示详情,日期转换,¥字符串拼接)

题目&#xff1a; 实现过程 控制器代码 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc;namespace MvcApplication1.Controllers {public class HomeController : Controller{//// GET: /Home/public Action…

【Bootstrap Faster R-CNN】《Is Faster R-CNN Doing Well for Pedestrian Detection?》

ECCV-2016 中山大学 文章目录 1 Background and Motivation2 Related Work3 Advantages / Contributions4 Method4.1 Region Proposal Network for Pedestrian Detection4.2 Feature Extraction4.3 Boosted Forest 5 Experiments5.1 Datasets and Metrics5.2 Ablation Experim…

python主线程捕获子线程异常

目录 问题抛出&#xff1a;子线程出现异常&#xff0c;主线程仍会正常进行吗 设计实现python主线程捕获子线程异常 需求 问题 解决思路 示例代码 问题抛出&#xff1a;子线程出现异常&#xff0c;主线程仍会正常进行吗 结论&#xff1a;子线程出现异常&#xff0c;主线程…

【C++进阶学习】第一弹——继承(上)——探索代码复用的乐趣

前言&#xff1a; 在前面&#xff0c;我们已经将C的初阶部分全部讲完了&#xff0c;包括类与对象、STL、栈和队列等众多内容&#xff0c;今天我们就进入C进阶部分的学习&#xff0c;今天先来学习第一弹——继承 目录 一、什么是继承&#xff1f;为什么会有继承&#xff1f; 二…

构建实时搜索与推荐系统:Elasticsearch与业务结合

在当今这个信息爆炸的时代&#xff0c;搜索引擎和推荐系统已成为我们日常生活中不可或缺的一部分。它们不仅帮助我们快速找到所需信息&#xff0c;还根据我们的喜好推荐相关内容&#xff0c;提升了用户体验。本文将探讨如何使用Elasticsearch构建实时搜索与推荐系统&#xff0c…

WPS JS宏获取自动筛选后的行数

//WPS JS宏获取自动筛选后的行数 function getFilterRowCnt(shtRng)//shtRng表示筛选目标工作表范围 {let lngRowCnt 0;for(let rngCell of shtRng.SpecialCells(xlCellTypeVisible).Areas)//获取自动筛选后的单元格行数{lngRowCnt lngRowCnt rngCell.Rows.Count;}return ln…

Web--CSS基础

文章目录 定义方式选择器文本字体背景边框元素展示格式内边距与外边距盒子模型位置浮动实战&#xff1a;个人信息卡片 flex布局响应式布局 定义方式 行内样式表 直接定义在style属性中&#xff0c;作用于当前标签 <img src "/imges/logo.jpg" alt "" …

Vue37-非单文件组件

一、组件的两种编写形式&#xff1a; 非单文件组件&#xff1b;单文件组件。 二、创建一个组件 2-1、组件中的el 组件中不写el&#xff0c;不说为谁服务。 2-2、组件中的data 因为对象形式&#xff0c;多处复用的话&#xff0c;有引用关系&#xff0c;改一处&#xff0c;另一…