SQL 计算累积销售额
时间:2022-07-24
本文章向大家介绍SQL 计算累积销售额,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
有一张销售记录表 t_sales,它记录了公司在某个年份的销售记录。由于一些原因,目前只能看到两个字段:month 和 quantity,它们分别对应的中文描述是月份和售额。
t_sales 的数据如下:
month quantity
------ ----------
1 100
1 300
2 200
3 300
4 400
5 300
5 500
6 600
7 600
8 600
9 600
10 700
11 800
12 900
注意,在一个月里面是可以产生多条销售记录。
现在,我们希望从这份数据中统计出「总销售额」、「月销售额」、「当前累积销售额」,统计的结果如下:
月份 销售额 总销售额 月销售额 累积销售额
------ -------- -------- --------- --------
1 100 6900 400 400
1 300 6900 400 400
2 200 6900 200 600
3 300 6900 300 900
4 400 6900 400 1300
5 300 6900 800 2100
5 500 6900 800 2100
6 600 6900 600 2700
7 600 6900 600 3300
8 600 6900 600 3900
9 600 6900 600 4500
10 700 6900 700 5200
11 800 6900 800 6000
12 900 6900 900 6900
解决方案
统计总销售额可以使用 SELECT SUM(quantity) FROM t_sales
;
统计月销售额可以使用 SELECT month,SUM(quantity) FROM t_sales GROUP BY month
;
统计当前累积销售额使用:
SELECT
(SELECT
SUM(quantity)
FROM
t_sales
WHERE MONTH <= a.month) AS '累积销售额'
FROM
t_sales a
再使用原表分别去关联这些统计结果,完整的 SQL 如下:
SELECT
a.month AS '月份',
a.quantity AS '销售额',
(SELECT
SUM(quantity)
FROM
t_sales) AS '总销售额',
c.amount AS '月销售额',
(SELECT
SUM(quantity)
FROM
t_sales
WHERE MONTH <= a.month) AS '累积销售额'
FROM
t_sales a
LEFT JOIN
(SELECT
MONTH,
SUM(quantity) AS amount
FROM
t_sales
GROUP BY MONTH) c
ON c.month = a.month
如果使用窗口函数,整个 SQL 的实现会简洁很多。
用 sum(quantity)over()
统计出总销售额;
用 sum(quantity) over(PARTITION by month)
统计月销售额;
用 sum(quantity) over(order by month)
统计当前累积销售额。
具体的 SQL 如下:
SELECT
MONTH AS '月份',
quantity AS '销售额',
SUM(quantity) over () AS '总销售额',
SUM(quantity) over (PARTITION BY MONTH) AS '月销售额',
SUM(quantity) over (
ORDER BY MONTH) AS '累积销售额'
FROM
t_sales
- MySQL 教程
- MySQL 安装
- MySQL 管理与配置
- MySQL PHP 语法
- MySQL 连接
- MySQL 创建数据库
- MySQL 删除数据库
- MySQL 选择数据库
- MySQL 数据类型
- MySQL 创建数据表
- MySQL 删除数据表
- MySQL 插入数据
- MySQL 查询数据
- MySQL where 子句
- MySQL UPDATE 查询
- MySQL DELETE 语句
- MySQL LIKE 子句
- mysql order by
- Mysql Join的使用
- MySQL NULL 值处理
- MySQL 正则表达式
- MySQL 事务
- MySQL ALTER命令
- MySQL 索引
- MySQL 临时表
- MySQL 复制表
- 查看MySQL 元数据
- MySQL 序列 AUTO_INCREMENT
- MySQL 处理重复数据
- MySQL 及 SQL 注入
- MySQL 导出数据
- MySQL 导入数据
- MYSQL 函数大全
- MySQL Group By 实例讲解
- MySQL Max()函数实例讲解
- mysql count函数实例
- MYSQL UNION和UNION ALL实例
- MySQL IN 用法
- MySQL between and 实例讲解
- 精讲RestTemplate第6篇-文件上传下载与大文件流式下载
- 【Rust日报】2020-09-12 Apple 使用 Rust 进行底层编程
- 精讲RestTemplate第4篇-POST请求方法使用详解
- 精讲RestTemplate第3篇-GET请求使用方法详解
- 通过JSch运行远程linux主机上的shell脚本
- 精讲RestTemplate第5篇-DELETE、PUT等请求方法使用详解
- 一个小小的签到功能,到底用MySQL还是Redis?
- 在IntelliJ IDEA中多线程并发代码的调试方法
- 使用java API进行zip递归压缩文件夹以及解压
- C#刷剑指Offer | 从上到下打印二叉树
- Java自动化测试(web自动化测试框架2 29)
- 精讲RestTemplate第9篇-如何通过HTTP Basic Auth认证
- 【Rust日报】2020-09-14 测试数据表明, Rust 可以帮你省钱!
- 【43期】盘点那些必问的数据结构算法题之二叉树基础
- 精讲RestTemplate第8篇-请求失败自动重试机制