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的小计
,
### SQL 中 `SUM` 函数的使用 在 SQL 查询中,`SUM()` 是一种常用的聚合函数,用于计算某一列数值的总和。以下是关于如何使用 `SUM()` 的详细介绍以及一些常见的应用场景。 #### 1. 基本语法 `SUM()` 函数的基本语法如下所示: ```sql SELECT SUM(column_name) AS total_sum FROM table_name; ``` 此查询会返回指定表中某列所有值的总和[^1]。 #### 2. 结合条件过滤 如果需要对特定条件下的数据进行求和操作,可以结合 `WHERE` 子句来限定范围: ```sql SELECT SUM(salary) AS total_salary FROM employees WHERE department_id = 5; ``` 该示例表示只统计部门 ID 为 5 的员工薪资总额[^1]。 #### 3. 处理复杂表达式的求和 当涉及更复杂的逻辑运算时,可以在 `SUM()` 内部嵌套其他表达式或函数。例如,根据某些字段动态调整权重后再求和: ```sql SELECT SUM(height * CASE WHEN open_type LIKE '%双开%' THEN 2 ELSE 1 END * 2) AS adjusted_height_sum FROM cloth_table; ``` 这里展示了如何通过 `CASE` 语句判断字段值并应用不同的倍率因子,最终完成加权求和的任务[^2]。 #### 4. 利用窗口函数实现分组内的累积求和 除了普通的整体汇总外,还可以借助窗口函数达成按某种顺序排列后的累进合计效果。下面的例子演示了按照学号升序依次累加各学生得分的情形: ```sql SELECT student_id, score, SUM(score) OVER (ORDER BY student_id ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS cumulative_score FROM scores; ``` 这段代码中的 `OVER` 子句定义了一个滑动窗口框架,它使得每条记录都能获取到当前行及其之前所有同行分数之和作为新字段值显示出来[^1]。 以上就是几种典型的利用SQL语句执行求和的方法介绍,涵盖了从简单直接调用至较为高级别的组合运用等多个层面的知识点讲解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值