【随手记】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 三个月的工资总和。
  • 对于其他行以此类推。

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

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

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

相关文章

鸿蒙Harmony应用开发—ArkTS(stateStyles:多态样式)

Styles和Extend仅仅应用于静态页面的样式复用,stateStyles可以依据组件的内部状态的不同,快速设置不同样式。这就是我们本章要介绍的内容stateStyles(又称为:多态样式)。 概述 stateStyles是属性方法,可以…

uniapp app端跳转到应用商店

uniapp app端跳转到应用商店 安卓是指定包名跳转,iOS需要指定id: if (plus.os.name "Android") {// 跳转安卓应用市场let appurl "market://details?idcom.tencent.mm" //这个是通用应用市场,如果想指定某个应用商店&#xff0…

基于springboot的4S店车辆管理系统

基于springboot的4S店车辆管理系统 的设计和实现 开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7(一定要5.7版本) 数据库工具:Navicat11 开…

c语言食堂就餐排队问题290行

定制魏:QTWZPW,获取更多源码等 目录 题目 数据结构 函数设计 结构设计 总结 效果截图 ​ 主函数代码 题目 设计一个程序来模拟食堂就餐排队问题,通过输入学生人数和面包数量,计算有多少学生能够吃到午餐。 数据结构 该…

【Docker】在 Ubuntu 上安装 Docker 的步骤

在 Ubuntu 上安装 Docker 的步骤如下: 更新包索引并安装必要的软件包以允许 apt 使用 HTTPS: sudo apt update sudo apt install apt-transport-https ca-certificates curl software-properties-common注意!网上另有一个命令声称最简洁&am…

25.2 微服务Dubbo

25.2 微服务Dubbo 1. Dubbo简介2. RPC3. Dubbo工作原理4. 代码实操4.1 父项目1. 依赖4.2 服务提供者1. 依赖2. 配置文件3. 启动类4. 业务类4.3 服务消费者1. 依赖2. 配置文件3. 消费者启动类4. 业务:实现远程调用

GPS授时器(NTP校时服务器)助力电子政务系统建设

GPS授时器(NTP校时服务器)助力电子政务系统建设 GPS授时器(NTP校时服务器)助力电子政务系统建设 摘要:随着电子政务的不断发展,许多省份都建立了自己的政务网络,使用的网络设备和服务器日益增多…

Tomcat部署war包

1.首先将咱们的web项目进行打包,打成一个war包; 2.将war包放置在webapps目录下,当tomcat启动运行时会将war包自动解压在当前文件夹,war包名称即为访问路径; 3.在conf目录下server.xml里可以设置tomcat访问端口,如果端口…

数字资产管理系统、企业数字资产管理软件

数字资产管理系统(DAMS)是一系列软件,它提供了一个开放平台,支持对多媒体数据的采集、创建、管理、存储、归档、检索、传输和显示。这些多媒体数据包括图像、视频、声音、文本和电影剪辑等。这些基础软件不仅是内容创作&#xff0…

使用React搭建single-spa

自己搭建的Demo GitHub - ftao123/single-spa-react-demo: single-spa-react-demo 修改子应用的webpack配置 library: "app2"和libraryTarget: "umd"配置必须添加。 可以看到filename在开发环境下的地址是static/js/bundle.js,所以我们主应用…

Java多线程自定义线程池——线程池的七大参数和四大拒绝策略

线程池 2.1 线程池思想 我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统…

Linux/Bizness

Enumeration nmap 用 nmap 扫描了常见的端口,发现对外开放了22,80,443 ┌──(kali㉿kali)-[~] └─$ nmap 10.10.11.252 Starting Nmap 7.93 ( https://nmap.org ) at 2024-03-08 01:21 EST Nmap scan report for 10.10.11.252 Host is up (0.36s latency). Not…

python 空间距离计算

目录 python 空间距离计算 已知两点,画三角形 批量矩阵计算 python 空间距离计算 要在空间中找到一个点,使其位于点 b 和 c 之间的连线上,并且与点 b 的距离等于点 a 到点 b 的距离的2倍。 import numpy as npif __name__ __main__:a …

MySQL下载安装和本地连接

1、下载MySQL 从MySQL官网下载MySQL Community Server版本: 下载地址:MySQL官网 1、进入官网,点击DOWNLOADS 2、点击MySQL Community(GPL)Downloads 3、点击MySQL Installer for Windows 4、这个会直接跳转到最新的版本 如果想下载以往的…

题目:笨笨机器人(蓝桥OJ 3262)

问题描述: 解题思路: 用n位二进制数每位来表示每一步的状态,2的n次幂即使全部可能。遍历计算全部符合题意总数,再用cnt/(2的n次幂)即答案。 需要注意的是,四舍五入后四位的方法:round(),可以四舍…

计算机网络——数据链路层(数据链路层功能概述)

计算机网络——数据链路层(数据链路层功能概述) 数据链路层的功能数据链路层的基本概念封装成帧和透明传输 我们之前已经学完了物理层的所有内容,今天开始我们要进入数据链路层的学习,如果有小伙伴对物理层的内容感兴趣的话&#…

from_pretrained 做了啥

transformers的三个核心抽象类是Config, Tokenizer和Model,这些类根据模型种类的不同,派生出一系列的子类。构造这些派生类的对象也很简单,transformers为这三个类都提供了自动类型,即AutoConfig, AutoTokenizer和AutoModel。三个…

算法系列--动态规划--子序列(2)

💕"你可以说我贱,但你不能说我的爱贱。"💕 作者:Mylvzi 文章主要内容:算法系列–动态规划–子序列(2) 今天带来的是算法系列--动态规划--子序列(2),包含了关于子序列问题中较难的几道题目(尤其是通过二维状…

数据结构从入门到精通——快速排序

快速排序 前言一、快速排序的基本思想常见方式通用模块 二、快速排序的特性总结三、三种快速排序的动画展示四、hoare版本快速排序的代码展示普通版本优化版本为什么要优化快速排序代码三数取中法优化代码 五、挖坑法快速排序的代码展示六、前后指针快速排序的代码展示七、非递…

VSCode最强插件合集,助你代码开发效率翻倍!

大家好,我是宝哥。 今天给大家推荐14个VSCode靠前的编程辅助插件,它们可以帮助你提高代码编写、调试、阅读和管理效率。 1.ESLint 简介:用于检查JavaScript代码的语法和风格错误。 功能特色:支持多种规则,可以自定义规…