SQL中累计求和与滑动求和函数sum() over()的用法

news2025/3/31 22:19:01

@[TOC](SQL中累计求和与滑动求和函数sum() over()的用法)

一、窗口函数功能简介

sum(c) over(partition by a order by b) 按照一定规则汇总c的值,具体规则为以a分组,每组内按照b进行排序,汇总第一行至当前行的c的加和值。

  • sum():对某个字段求和。

  • over():开窗,按照某种规则,将数据分组、分窗口计算。

  • sum() over() :对所有行进行求和。

  • sum() over(order by) :按照order by对应字段的顺序,进行累计求和,即第一行到当前行,默认order by 是升序排序(asc),也可以通过指定降序排序(desc)。

二、三种用法

sum()函数的升级用法,开窗函数(也叫分析函数)sum() over()一般有三种用法:

  1. 分组求和

  2. 累计求和

  3. 滑动求和

三、使用案例

我们以一个案例分别看下三种求和场景的SQL代码写法:

数据样本

我们的数据样本为一个名叫dws_js_team_gmv的底表,字段依次为team_name(销售团队)、month(月份)、gmv(成交额)

在这里插入图片描述

三种求和场景的SQL代码写法

  1. 题目:请统计各销售团队年累计成交额,及各销售团队各月成交额对累计成交的贡献占比

解题思路:只是分组求和的话sum()就能实现,按题目要求,需要实现分组求和的同时又保留目前的数据行数,因此考虑在查取已有字段的基础上增加分组求和值

SQL逻辑:

SELECT team_name --团队
,month --统计月份
,gmv --当月成交额
--对gmv按照team_name分组求和,相当于小组gmv的小计
,SUM(gmv) OVER(partition by team_name) AS pay_amt --销售组累计成交额
,gmv/SUM(gmv) OVER(partition by team_name) gmv_rate --该月成交额占比
FROM dws_js_team_gmv
GROUP BY team_name

--如果只是求单独的各销售团队成交额,那用sum()就能实现,以上需求和分组求和的差异是既要分组求和还需要保留分月数据
SELECT team_name,SUM(gmv) AS pay_amt
FROM dws_js_team_gmv
GROUP BY team_name

SQL跑数结果:

在这里插入图片描述

  1. 题目:请统计各销售团队在各月的累计业绩值,开始时间从1月算

解题思路:只是分组求和的话sum()就能实现,按题目要求,需要实现分组求和的同时又保留目前的数据行数,因此考虑在查取已有字段的基础上增加分组求和值

SQL逻辑:

SELECT team_name --团队
,month --统计月份
,gmv --当月成交额
--对gmv按照team_name分组,再按month累计求和,order by 默认是升序排序,需要降序末尾加DESC
,SUM(gmv) OVER(partition by team_name order by month) AS pay_amt --销售组累计成交额
FROM dws_js_team_gmv
GROUP BY team_name

--如果只是求单独的各销售团队成交额,那用sum()就能实现,以上需求和分组求和的差异是既要分组求和还需要保留分月数据
SELECT team_name,SUM(gmv) AS pay_amt
FROM dws_js_team_gmv
GROUP BY team_name

SQL跑数结果:

在这里插入图片描述

  1. 题目:请统计各销售团队在各月时的近3个月累计业绩(含统计月)。

  2. 题目:请统计各销售团队在各月时的近3个月累计业绩(不含统计月)。

  3. 题目:请统计各销售团队在各月及其之后2个月的累计业绩,如3月则统计3、4、5这三个月的成交额。

解题思路:以上三题共性是都要做分组且需要根据统计月份滑动求和,先对其做分组后的滑动求和,再调参设置滑动的范围,需要在over函数中使用range between and指定窗口的大小,向前使用preceding,向后使用following。如2 preceding and 1 following指定的窗口包括当前行、当前行前面两行以及当前行后面一行,总共4行。

SQL逻辑:

近3个月累计业绩(含统计月)值的滑动范围参数我们可以写成“range between 2 preceding and 0 following”或“range between 2 preceding and current row

SELECT team_name --团队
,month --统计月份
,gmv --当月成交额
--对gmv按照team_name分组求和,相当于小组gmv的小计
,SUM(gmv) OVER(partition by team_name order by month range between 2 preceding and 0 following) AS pay_amt --销售组累计成交额
FROM dws_js_team_gmv
GROUP BY team_name

--如果只是求单独的各销售团队成交额,那用sum()就能实现,以上需求和分组求和的差异是既要分组求和还需要保留分月数据
SELECT team_name,SUM(gmv) AS pay_amt
FROM dws_js_team_gmv
GROUP BY team_name

如果希望滑动求和不包含统计月的值,有三种实现思路:

①用近4个月的滑动求和(含统计月)- 统计月的值;

②将滑动区间参数配置成“range between 3 preceding and 1 preceding

③将滑动区间参数配置成“range between 3 preceding and -1 following


参考连接:
https://zhuanlan.zhihu.com/p/626512180
https://blog.csdn.net/lxp90/article/details/142814074
https://blog.csdn.net/weixin_43658805/article/details/133879642

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

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

相关文章

【Sql Server】在SQL Server中生成雪花ID(Snowflake ID)

大家好,我是全栈小5,欢迎来到《小5讲堂》。 这是《Sql Server》系列文章,每篇文章将以博主理解的角度展开讲解。 温馨提示:博主能力有限,理解水平有限,若有不对之处望指正! 目录 前言认识雪花ID…

FPGA——分秒计数器设计(DE2-115开发板)

一、项目创建 1.创建工程 点击File->New Project Wizard...或者直接在页面处点击 在第一行选择文件存放地点,第二行为项目名称,第三行为顶级设计实体名称 (下面的步骤可以暂时不做直接点Finish,因为是先写代码先把它跑出来暂…

雅思练习总结(九)

雅思练习总结(九) 本文章是雅思练习总结(九),总结了文章《BAKELITE》,内容包括原文精翻,文章脉络总结,单词扩展学习3个部分 1 文章原文及翻译 BAKELITE 翻译:贝克莱特…

windows USB 了解

GUID GUID 是一个 128 位的数字,在全球范围内是独一无二的,常被用于标识软件组件、设备接口等,以保证在不同系统和环境中能唯一识别特定对象。 DEFINE_GUID(GUID_DEVINTERFACE_USCUSTOMKEYS, 0x12345678, 0x1234, 0x5678, 0x12, 0x12, 0x23…

光谱相机的光谱信息获取

光谱信息的获取方式主要依赖于不同分光技术和成像方法,将入射光分解为不同波长并记录其强度。以下是常见的光谱信息获取技术分类及原理: ‌1. 分光技术(物理分解波长)‌ ‌(1) 滤光片法‌ ‌原理‌:使用固定或可调滤…

免去繁琐的手动埋点,Gin 框架可观测性最佳实践

作者:牧思 背景 在云原生时代的今天,Golang 编程语言越来越成为开发者们的首选,而对于 Golang 开发者来说,最著名的 Golang Web 框架莫过于 Gin [ 1] 框架了,Gin 框架作为 Golang 编程语言官方的推荐框架 [ 2] &…

构建大语言模型应用:简介(第一部分)

本专栏聚焦大语言模型(LLM)相关内容的解析,通过检索增强生成(RAG)应用的视角来进行。 本系列文章 简介(本文)数据准备句子转换器向量数据库搜索与检索大语言模型开源检索增强生成评估大语言模…

PEmicro Multilink FX调试踩坑

文章目录 1.背景2 功能说明2.1 实时数据查看功能2.1 电压观测2.2 SWO功能 3 设置与支持 1.背景 既然使用了NXP的芯片,笔者就想使用一下它的专用调试器,这里先说一下,笔者是从朋友那里借了一个调试器,型号为PEmicro Multilink FX …

主流大模型采用的架构、注意力机制、位置编码等汇总表

记录下主流大模型的一些核心知识点,包括: 架构注意力机制位置编码归一化激活函数模型参数 表中的一些模型已经是很久之前的了,比如表中并未收入 DeepSeek V3 中使用的MLA的注意力机制。先占个位,后续如果有更新的汇总表再来更…

SpringBoot学习笔记3.27

目录 实战篇第二课 1.注册参数的校验: 学习过程中遇到的问题: 1.什么是正则表达式 2.怎么自定义异常? 1. 创建全局异常处理类 2. 定义响应对象 3. 使用 ExceptionHandler 4. 设置响应状态码 5. 返回统一响应 6. 测试全局异常处理 …

2025NCTF--Web

文章目录 Websqlmap-masterez_dashez_dash_revenge Web sqlmap-master 源码 from fastapi import FastAPI, Request from fastapi.responses import FileResponse, StreamingResponse import subprocessapp FastAPI()app.get("/") async def index():return File…

如何破解软件自动化测试框架的维护难题

破解软件自动化测试框架的维护难题应从优化测试用例设计、加强脚本的模块化与复用性、提高自动化测试工具的选择与使用效率等方面入手。其中,加强脚本的模块化与复用性尤为关键,通过提高脚本的模块化程度,可以显著降低后续维护成本&#xff0…

外星人入侵(python设计小游戏)

这个游戏简而言之就是操作一个飞机对前方的飞船进行射击,和一款很久之前的游戏很像,这里是超级低配版那个游戏,先来看看效果图: 由于设计的是全屏的,所以电脑不能截图。。。。 下面的就是你操控的飞船,上面…

iOS rootless无根越狱检测方案

不同于安卓的开源生态,iOS一直秉承着安全性更高的闭源生态,系统中的硬件、软件和服务会经过严格审核和测试,来保障安全性与稳定性。 据FairGurd观察,虽然iOS系统具备一定的安全性,但并非没有漏洞,如市面上…

LLM 优化技术(1)——Scaled-Dot-Product-Attention(SDPA)

在 Transformer 中抛弃了传统的 CNN 和 RNN,整个网络结构完全由Scaled Dot Product Attention 和Feed Forward Neural Network组成。一个基于 Transformer 的可训练的神经网络可以通过堆叠 Transformer 的形式进行搭建,Attention is All You Need论文中通…

基于音频驱动的CATIA动态曲面生成技术解析

一、技术背景与创新价值 在工业设计领域,参数化建模与动态仿真的结合一直是研究热点。本文提出的音频驱动建模技术突破了传统参数调整方式,实现了音乐节奏与三维曲面的实时动态交互。该技术可广泛应用于以下场景: ​艺术化产品设计&#xf…

5-管理员-维护权限

在“后台”-“人员管理”-“权限”下,通过不同的操作按钮,按照权限分组对权限进行设置。操作部分的按钮依次为 视野维护:设置该分组可以查看、访问的视图。权限维护:设置分组成员可以操作的具体动作等所有在禅道中涉及的权限。成…

全新升级 | Built For You Spring ‘25 发布,Fin 智能客服实现新突破!

图像识别、语音交互、任务自动化,立即体验智能客服蜕变! 上周,Intercom 举办了 Built For You Spring 25 发布会,正式揭晓了 AI Agent Fin 的一系列令人振奋的更新。Fin 正在以前所未有的速度革新客户支持模式——它已经成功解决了…

LeeCode 434. 字符串中的单词数

统计字符串中的单词个数,这里的单词指的是连续的不是空格的字符。 请注意,你可以假定字符串里不包括任何不可打印的字符。 示例: 输入: "Hello, my name is John" 输出: 5 解释: 这里的单词是指连续的不是空格的字符,所以 "…

【AI编程学习之Python】第一天:Python的介绍

Python介绍 简介 Python是一种解释型、面向对象的语言。由吉多范罗苏姆(Guido van Rossum)于1989年发明,1991年正式公布。官网:www.python.org Python单词是"大蟒蛇”的意思。但是龟叔不是喜欢蟒蛇才起这个名字,而是正在追剧:英国电视喜剧片《蒙提派森的飞行马戏团》(Mo…