【随手记】MySQL窗口函数计算累加和

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 【随手记】MySQL窗口函数计算累加和
SELECT id, month, salary,
    SUM(salary) OVER (ORDER BY month ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) AS rolling_total
FROM employee;

1.当前行及其前2行累加求和

SUM(salary) OVER (ORDER BY month ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) 是一个窗口函数,用于计算工资的累计总和。

让我们逐个解释这个窗口函数的不同部分:

  • SUM(salary) 表示对 salary 列求和,即计算每个月的工资总和。
  • OVER 关键字后面指定了窗口定义,用于定义计算的范围。
  • (ORDER BY month) 指定了窗口按照 month 列进行排序,即按照月份的顺序进行计算。
  • ROWS BETWEEN 2 PRECEDING AND CURRENT ROW 指定了窗口的范围,从当前行往前的前两行到当前行的范围。也就是说,对于每个月份的行,窗口函数会计算该行和前两个月份的行的工资总和。

举个例子来说明这个窗口函数的计算过程:

假设有以下数据:

| id | month  | salary |
|----|--------|--------|
| 1  | 202001 | 1000   |
| 2  | 202002 | 1500   |
| 3  | 202003 | 2000   |
| 4  | 202004 | 1200   |
| 5  | 202005 | 1800   |

对于每个月份的行,窗口函数会计算当前行及其前两个月份的工资总和。

  • 对于第一行(202001),窗口函数会计算 202001、201912 和 201911 三个月的工资总和(因为前两个月份不存在,所以只计算当前行的工资)。
  • 对于第二行(202002),窗口函数会计算 202002、202001 和 201912 三个月的工资总和。
  • 对于第三行(202003),窗口函数会计算 202003、202002 和 202001 三个月的工资总和。
  • 对于其他行以此类推。

这样,通过窗口函数的计算,可以得到每个月的工资总和和最近3个月的工资总和。

2.当前行及其后2行累加求和

如果想计算当前行及其后两行的和,可以使用 ROWS BETWEEN CURRENT ROW AND 2 FOLLOWING

例如,对于以下数据:

| id | month  | salary |
|----|--------|--------|
| 1  | 202001 | 1000   |
| 2  | 202002 | 1500   |
| 3  | 202003 | 2000   |
| 4  | 202004 | 1200   |
| 5  | 202005 | 1800   |

使用窗口函数 SUM(salary) OVER (ORDER BY month ROWS BETWEEN CURRENT ROW AND 2 FOLLOWING),计算每个月份及其后两个月份的工资总和。

  • 对于第一行(202001),窗口函数会计算 202001、202002 和 202004 三个月的工资总和(因为后两个月份不存在,所以只计算当前行的工资)。
  • 对于第二行(202002),窗口函数会计算 202002、202003 和 202004 三个月的工资总和。
  • 对于第三行(202003),窗口函数会计算 202003、202004 和 202005 三个月的工资总和。
  • 对于其他行以此类推。

通过调整窗口定义,可以灵活地计算不同范围的工资总和。

前1行、当前行及其后1行累加求和

如果想计算当前行、前一行和后一行的和,可以使用 ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING

例如,对于以下数据:

| id | month  | salary |
|----|--------|--------|
| 1  | 202001 | 1000   |
| 2  | 202002 | 1500   |
| 3  | 202003 | 2000   |
| 4  | 202004 | 1200   |
| 5  | 202005 | 1800   |

使用窗口函数 SUM(salary) OVER (ORDER BY month ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING),计算每个月份、前一个月份和后一个月份的工资总和。

  • 对于第一行(202001),窗口函数会计算 202001、202002 和 202003 三个月的工资总和(因为前一个月份不存在,所以只计算当前行和后一个月份的工资)。
  • 对于第二行(202002),窗口函数会计算 202001、202002 和 202003 三个月的工资总和。
  • 对于第三行(202003),窗口函数会计算 202002、202003 和 202004 三个月的工资总和。
  • 对于其他行以此类推。

通过调整窗口定义,可以灵活地计算不同范围的工资总和。

相关实践学习
基于函数计算一键部署掌上游戏机
本场景介绍如何使用阿里云计算服务命令快速搭建一个掌上游戏机。
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
目录
相关文章
|
2月前
|
SQL 关系型数据库 MySQL
MYSQL根据查询结果删除sql 去除重复id 新增对比前一条与后一条数据 去重3种方法​ 窗口函数
MYSQL根据查询结果删除sql 去除重复id 新增对比前一条与后一条数据 去重3种方法​ 窗口函数
|
10天前
|
关系型数据库 MySQL 数据库
MySQL 保姆级教程(八):创建计算字段
MySQL 保姆级教程(八):创建计算字段
|
23天前
|
关系型数据库 MySQL 数据挖掘
MySQL窗口函数:原理和使用
MySQL窗口函数:原理和使用
|
23天前
|
消息中间件 关系型数据库 Serverless
函数计算产品使用问题之如何通过vpc来连接rds数据库
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
1月前
|
关系型数据库 MySQL 数据挖掘
MySQL窗口函数详解(概念+练习+实战)
MySQL窗口函数详解(概念+练习+实战)
115 1
|
1月前
|
关系型数据库 MySQL
【随手记】MySQL中ROW_NUMBER()、RANK()和DENSE_RANK()函数的用法
【随手记】MySQL中ROW_NUMBER()、RANK()和DENSE_RANK()函数的用法
24 1
|
1月前
|
关系型数据库 MySQL
MYSQL 窗口函数
MYSQL 窗口函数
|
1月前
|
关系型数据库 MySQL 数据挖掘
MySQL 8窗口函数详解:高效数据处理的必备技能
MySQL 8窗口函数详解:高效数据处理的必备技能
31 3
|
26天前
|
分布式计算 大数据 关系型数据库
MaxCompute产品使用问题之mysql读取从mc里的每10分钟计算好的结果数据表,如何同步数据过去
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
29天前
|
存储 SQL 关系型数据库
MySQL快速回顾:计算字段与函数
MySQL快速回顾:计算字段与函数

推荐镜像

更多