SQL进阶技巧:如何计算复合增长率?

目录

0 场景描述

1 数据准备

2 问题分析

3 小结


0 场景描述

复合增长率是第N期的数据除以第一期的基准数据,然后开N-1次方再减去1得到的结果。假如2018年的产品销售额为10000,2019年的产品销售额为12500,2020年的产品销售额为15000(销售额单位省略,下同)​。那么这两年的复合增长率的计算方式如下

复合增长率的计算公式如下:

复合增长率 = (最终值 / 初始值)^( 1 / n) - 1

其中:

  • 最终值是指期末的数值;
  • 初始值是指起始的数值;
  • n 时间段数量是指经过 n 个时间段的增长所到达的值。

举例来说,假设某项指标在起始时刻(一月份)为 100,经过 6 个月(到达七月份)的增长,最终值为 200,则可以按照以下步骤计算月均复合增长率:

月均复合增长率 = ( (200 / 100)^(1 / (7-1)) -1) * 100%

这样就得到了某指标经过 6 个月的整体增长率(复合增长率) 为12.25%

 在计算月均或年均复合增长率时,需要使用连续的起始值和结束值来进行计算。假设有 n 个连续的月份数据,那么起始值到结束值的时间跨度为 n-1 个月,只计算后续的增长情况。

以年度为单位计算的复合增长率被称为年均复合增长率,以月度为单位计算的复合增长率被称为月均复合增长率。查询自2018年1月以来不同产品的月均销售额复合增长率?

1 数据准备

-- 创建销量表sales_monthly
-- product表示产品名称,ym表示年月,amount表示销售金额(元)
CREATE TABLE sales_monthly(product varchar2(20), ym varchar2(6), amount decimal(10, 2));
-- 生成测试数据
INSERT INTO sales_monthly (product,ym,amount) VALUES ('苹果','201801',10159.00);
INSERT INTO sales_monthly (product,ym,amount) VALUES ('苹果','201802',10211.00);
INSERT INTO sales_monthly (product,ym,amount) VALUES ('苹果','201803',10247.00);
INSERT INTO sales_monthly (product,ym,amount) VALUES ('苹果','201804',10376.00);
INSERT INTO sales_monthly (product,ym,amount) VALUES ('苹果','201805',10400.00);
INSERT INTO sales_monthly (product,ym,amount) VALUES ('苹果','201806',10565.00);
INSERT INTO sales_monthly (product,ym,amount) VALUES ('苹果','201807',10613.00);
INSERT INTO sales_monthly (product,ym,amount) VALUES ('苹果','201808',10696.00);
INSERT INTO sales_monthly (product,ym,amount) VALUES ('苹果','201809',10751.00);
INSERT INTO sales_monthly (product,ym,amount) VALUES ('苹果','201810',10842.00);
INSERT INTO sales_monthly (product,ym,amount) VALUES ('苹果','201811',10900.00);
INSERT INTO sales_monthly (product,ym,amount) VALUES ('苹果','201812',10972.00);
INSERT INTO sales_monthly (product,ym,amount) VALUES ('苹果','201901',11155.00);
INSERT INTO sales_monthly (product,ym,amount) VALUES ('苹果','201902',11202.00);
INSERT INTO sales_monthly (product,ym,amount) VALUES ('苹果','201903',11260.00);
INSERT INTO sales_monthly (product,ym,amount) VALUES ('苹果','201904',11341.00);
INSERT INTO sales_monthly (product,ym,amount) VALUES ('苹果','201905',11459.00);
INSERT INTO sales_monthly (product,ym,amount) VALUES ('苹果','201906',11560.00);
INSERT INTO sales_monthly (product,ym,amount) VALUES ('香蕉','201801',10138.00);
INSERT INTO sales_monthly (product,ym,amount) VALUES ('香蕉','201802',10194.00);
INSERT INTO sales_monthly (product,ym,amount) VALUES ('香蕉','201803',10328.00);
INSERT INTO sales_monthly (product,ym,amount) VALUES ('香蕉','201804',10322.00);
INSERT INTO sales_monthly (product,ym,amount) VALUES ('香蕉','201805',10481.00);
INSERT INTO sales_monthly (product,ym,amount) VALUES ('香蕉','201806',10502.00);
INSERT INTO sales_monthly (product,ym,amount) VALUES ('香蕉','201807',10589.00);
INSERT INTO sales_monthly (product,ym,amount) VALUES ('香蕉','201808',10681.00);
INSERT INTO sales_monthly (product,ym,amount) VALUES ('香蕉','201809',10798.00);
INSERT INTO sales_monthly (product,ym,amount) VALUES ('香蕉','201810',10829.00);
INSERT INTO sales_monthly (product,ym,amount) VALUES ('香蕉','201811',10913.00);
INSERT INTO sales_monthly (product,ym,amount) VALUES ('香蕉','201812',11056.00);
INSERT INTO sales_monthly (product,ym,amount) VALUES ('香蕉','201901',11161.00);
INSERT INTO sales_monthly (product,ym,amount) VALUES ('香蕉','201902',11173.00);
INSERT INTO sales_monthly (product,ym,amount) VALUES ('香蕉','201903',11288.00);
INSERT INTO sales_monthly (product,ym,amount) VALUES ('香蕉','201904',11408.00);
INSERT INTO sales_monthly (product,ym,amount) VALUES ('香蕉','201905',11469.00);
INSERT INTO sales_monthly (product,ym,amount) VALUES ('香蕉','201906',11528.00);
INSERT INTO sales_monthly (product,ym,amount) VALUES ('桔子','201801',10154.00);
INSERT INTO sales_monthly (product,ym,amount) VALUES ('桔子','201802',10183.00);
INSERT INTO sales_monthly (product,ym,amount) VALUES ('桔子','201803',10245.00);
INSERT INTO sales_monthly (product,ym,amount) VALUES ('桔子','201804',10325.00);
INSERT INTO sales_monthly (product,ym,amount) VALUES ('桔子','201805',10465.00);
INSERT INTO sales_monthly (product,ym,amount) VALUES ('桔子','201806',10505.00);
INSERT INTO sales_monthly (product,ym,amount) VALUES ('桔子','201807',10578.00);
INSERT INTO sales_monthly (product,ym,amount) VALUES ('桔子','201808',10680.00);
INSERT INTO sales_monthly (product,ym,amount) VALUES ('桔子','201809',10788.00);
INSERT INTO sales_monthly (product,ym,amount) VALUES ('桔子','201810',10838.00);
INSERT INTO sales_monthly (product,ym,amount) VALUES ('桔子','201811',10942.00);
INSERT INTO sales_monthly (product,ym,amount) VALUES ('桔子','201812',10988.00);
INSERT INTO sales_monthly (product,ym,amount) VALUES ('桔子','201901',11099.00);
INSERT INTO sales_monthly (product,ym,amount) VALUES ('桔子','201902',11181.00);
INSERT INTO sales_monthly (product,ym,amount) VALUES ('桔子','201903',11302.00);
INSERT INTO sales_monthly (product,ym,amount) VALUES ('桔子','201904',11327.00);
INSERT INTO sales_monthly (product,ym,amount) VALUES ('桔子','201905',11423.00);
INSERT INTO sales_monthly (product,ym,amount) VALUES ('桔子','201906',11524.00);

2 问题分析

步骤1:计算初始值并生成连续序列值

       select product,ym,total_amount,first_value(total_amount) over (partition by product order by ym) first_total_amount,row_number() over (partition by product order by ym)              rnfrom (select product,ym,sum(amount) total_amountfrom sales_monthlygroup by product, ym) t1
PRODUCT	YM	TOTAL_AMOUNT	FIRST_TOTAL_AMOUNT	RN
桔子	201801	10154	10154	1
桔子	201802	10183	10154	2
桔子	201803	10245	10154	3
桔子	201804	10325	10154	4
桔子	201805	10465	10154	5
桔子	201806	10505	10154	6
桔子	201807	10578	10154	7
桔子	201808	10680	10154	8
桔子	201809	10788	10154	9
桔子	201810	10838	10154	10
桔子	201811	10942	10154	11
桔子	201812	10988	10154	12
桔子	201901	11099	10154	13
桔子	201902	11181	10154	14
桔子	201903	11302	10154	15
桔子	201904	11327	10154	16
桔子	201905	11423	10154	17
桔子	201906	11524	10154	18
苹果	201801	10159	10159	1
苹果	201802	10211	10159	2
苹果	201803	10247	10159	3
苹果	201804	10376	10159	4
苹果	201805	10400	10159	5
苹果	201806	10565	10159	6
苹果	201807	10613	10159	7
苹果	201808	10696	10159	8
苹果	201809	10751	10159	9
苹果	201810	10842	10159	10
苹果	201811	10900	10159	11
苹果	201812	10972	10159	12
苹果	201901	11155	10159	13
苹果	201902	11202	10159	14
苹果	201903	11260	10159	15
苹果	201904	11341	10159	16
苹果	201905	11459	10159	17
苹果	201906	11560	10159	18
香蕉	201801	10138	10138	1
香蕉	201802	10194	10138	2
香蕉	201803	10328	10138	3
香蕉	201804	10322	10138	4
香蕉	201805	10481	10138	5
香蕉	201806	10502	10138	6
香蕉	201807	10589	10138	7
香蕉	201808	10681	10138	8
香蕉	201809	10798	10138	9
香蕉	201810	10829	10138	10
香蕉	201811	10913	10138	11
香蕉	201812	11056	10138	12
香蕉	201901	11161	10138	13
香蕉	201902	11173	10138	14
香蕉	201903	11288	10138	15
香蕉	201904	11408	10138	16
香蕉	201905	11469	10138	17
香蕉	201906	11528	10138	18

步骤2:利用公式计算月均复合增长率 

select product,ym,first_total_amount,total_amount,concat(cast(nvl((power(total_amount / first_total_amount, 1 / nullif((rn - 1), 0)) - 1) * 100,0.00) as decimal(10, 2)),'%') month_avg_compound_growth_rate
from (select product,ym,total_amount,first_value(total_amount) over (partition by product order by ym) first_total_amount,row_number() over (partition by product order by ym)              rnfrom (select product,ym,sum(amount) total_amountfrom sales_monthlygroup by product, ym) t1) t2;
PRODUCT	YM	FIRST_TOTAL_AMOUNT	TOTAL_AMOUNT	MONTH_AVG_COMPOUND_GROWTH_RATE
桔子	201801	10154	10154	0%
桔子	201802	10154	10183	.29%
桔子	201803	10154	10245	.45%
桔子	201804	10154	10325	.56%
桔子	201805	10154	10465	.76%
桔子	201806	10154	10505	.68%
桔子	201807	10154	10578	.68%
桔子	201808	10154	10680	.72%
桔子	201809	10154	10788	.76%
桔子	201810	10154	10838	.73%
桔子	201811	10154	10942	.75%
桔子	201812	10154	10988	.72%
桔子	201901	10154	11099	.74%
桔子	201902	10154	11181	.74%
桔子	201903	10154	11302	.77%
桔子	201904	10154	11327	.73%
桔子	201905	10154	11423	.74%
桔子	201906	10154	11524	.75%
苹果	201801	10159	10159	0%
苹果	201802	10159	10211	.51%
苹果	201803	10159	10247	.43%
苹果	201804	10159	10376	.71%
苹果	201805	10159	10400	.59%
苹果	201806	10159	10565	.79%
苹果	201807	10159	10613	.73%
苹果	201808	10159	10696	.74%
苹果	201809	10159	10751	.71%
苹果	201810	10159	10842	.73%
苹果	201811	10159	10900	.71%
苹果	201812	10159	10972	.7%
苹果	201901	10159	11155	.78%
苹果	201902	10159	11202	.75%
苹果	201903	10159	11260	.74%
苹果	201904	10159	11341	.74%
苹果	201905	10159	11459	.76%
苹果	201906	10159	11560	.76%
香蕉	201801	10138	10138	0%
香蕉	201802	10138	10194	.55%
香蕉	201803	10138	10328	.93%
香蕉	201804	10138	10322	.6%
香蕉	201805	10138	10481	.84%
香蕉	201806	10138	10502	.71%
香蕉	201807	10138	10589	.73%
香蕉	201808	10138	10681	.75%
香蕉	201809	10138	10798	.79%
香蕉	201810	10138	10829	.74%
香蕉	201811	10138	10913	.74%
香蕉	201812	10138	11056	.79%
香蕉	201901	10138	11161	.8%
香蕉	201902	10138	11173	.75%
香蕉	201903	10138	11288	.77%
香蕉	201904	10138	11408	.79%
香蕉	201905	10138	11469	.77%
香蕉	201906	10138	11528	.76%

3 小结

     本文介绍了复合增长率的概念及计算公式,并提供了SQL代码示例来计算商品的月度复合增长率。复合增长率是连续时间段内平均增长的速率。

    复合增长率是一个时间序列概念。当考虑一个资产或经济指标的长期增长时,不能仅看其绝对增长值,因为不同时间段内的增长速度可能会有所不同。复合增长率就是用来解决这个问题的一个很好的工具。它考虑了从过去到现在,再到预测未来的增长趋势。计算复合增长率时,通常会考虑多个时间点的数据,然后计算这些时间段内增长率的平均值。通过这种方式,我们可以得到一个相对稳定的增长指标,从而更好地预测未来的发展趋势。在金融市场、企业决策以及宏观经济分析中,复合增长率是一个非常重要的指标。通过了解和掌握复合增长率的概念和计算方法,投资者和企业决策者可以更好地把握市场动态,做出更为明智的决策。

 

如果您觉得本文还不错,对你有帮助,那么不妨可以关注一下我的数字化建设实践之路专栏,这里的内容会更精彩。

专栏 原价99,现在活动价59.9,按照阶梯式增长,还差5个人上升到69.9,最终恢复到原价

专栏优势:
(1)一次收费持续更新。

(2)实战中总结的SQL技巧,帮助SQLBOY 在SQL语言上有质的飞越,无论你应对业务难题及面试都会游刃有余【全网唯一讲SQL实战技巧,方法独特

(3)实战中数仓建模技巧总结,让你认识不一样的数仓。【数据建模+业务建模,不一样的认知体系】(如果只懂数据建模而不懂业务建模,数仓体系认知是不全面的

(4)数字化建设当中遇到难题解决思路及问题思考。

我的专栏具体链接如下:

数字化建设通关指南_莫叫石榴姐的博客-CSDN博客

https://blog.csdn.net/godlovedaniel/category_12706766.html

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

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

相关文章

开源的 API 学习平台「GitHub 热点速览」

前有 5 万颗星标的开源项目 HTTPie 因误操作导致 Star 清零(2022 年),上周知名开源项目 Elasticsearch 也经历了 Star 一夜清零的事件。这些事故的原因均是管理员误将开源项目从公开状态转为私有状态所导致。为避免类似事件再次发生&#xff…

华为HD集群重启NAMENODE实例操作步骤

华为HD集群重启NAMENODE实例操作步骤 管理员账号进入FI——服务——HDFS,选择角色:namenode重启namenode(备) 如下图:点击【实例】–角色选择【Namenode】–选择备节点(自己记录一下当前备节点的IP&…

LoRA:大型语言模型(LLMs)的低秩适应;低秩调整、矩阵的低秩与高秩

目录 LoRA:大型语言模型(LLMs)的低秩适应 一、LoRA的基本原理 二、LoRA的举例说明 三、LoRA的优势 低秩调整、矩阵的低秩与高秩 一、低秩调整(LoRA) 二、矩阵的低秩 三、矩阵的高秩 LoRA:大型语言模型(LLMs)的低秩适应 LoRA(Low-Rank Adaptation of LLMs),…

CST参数扫描设置细节

cst参数扫描的细节 点开参数扫描对话框,新建扫描参数, 例如参数a进行扫描1-2,0.5的步长,这样最后会出现3个参数的仿真结果。 这时如果增加参数b的扫描,在同一sequence下,同样1-2,0.5的步长&…

最高降本90%!它究竟是如何实现的?

第一、云在未来“优先”,病毒攻击和人为错误将成主要威胁 根据Gartner预测,到2025年,超过95%的新数字工作负载将被部署在云原生平台上,超过85%的企业机构将接受云优先原则。 在这一背景下,勒索病毒攻击和人为错误成为…

OpenCV—calcHist()函数

void calcHist( const Mat* images, int nimages,const int* channels, InputArray mask,SparseMat& hist, int dims,const int* histSize, const float** ranges,bool uniform true, bool accumulate false ); images 输入的数据指针,要具备相同的尺寸和数…

用例怎么链接到其他地方的序列图

龙勤思(2018年1月22日): 潘老师,你在PPT里说分析序列图的位置在用例下面。但是你上课时给的EA模板里需求和分析是分成两个包的,所以分析序列图没办法直接加为系统用例的下级元素 潘加宇: 这页幻灯片有点老了,回头我更新。严格来…

Java | Leetcode Java题解之第540题有序数组中的单一元素

题目&#xff1a; 题解&#xff1a; class Solution {public int singleNonDuplicate(int[] nums) {int low 0, high nums.length - 1;while (low < high) {int mid (high - low) / 2 low;mid - mid & 1;if (nums[mid] nums[mid 1]) {low mid 2;} else {high …

利用游戏引擎的优势

大家好&#xff0c;我是小蜗牛。 在当今快速发展的游戏产业中&#xff0c;选择合适的游戏引擎对开发者来说至关重要。Cocos Creator作为一款功能强大且灵活的游戏引擎&#xff0c;为开发者提供了丰富的工具和资源&#xff0c;使他们能够高效地开发出优秀的游戏。本文将探讨如何…

python怎样嵌入c

用c语言编写一个动态库&#xff0c;提供两个函数&#xff0c;两个数的整形求和&#xff0c;两个浮点数的求和。取名为mylib.c。 将c函数文件编译成so动态库。运行gcc mylib.c -fPIC -shared -o libtest.so命令&#xff0c;在目录下可以看到生成的库文件libtest.so。 Python调用…

ML 系列:机器学习和深度学习的深层次总结( 19)— PMF、PDF、平均值、方差、标准差

一、说明 在概率和统计学中&#xff0c;了解结果是如何量化的至关重要。概率质量函数 &#xff08;PMF&#xff09; 和概率密度函数 &#xff08;PDF&#xff09; 是实现此目的的基本工具&#xff0c;每个函数都提供不同类型的数据&#xff1a;离散和连续数据。 二、PMF 的定义…

一键AI换衣-可图AI试衣

我们的真的实现了穿衣自由了吗&#xff1f;上传一张人物图片和衣服的图片&#xff0c;就能实现一键换衣。 这就是可图AI试衣项目 魔塔地址&#xff1a;https://www.modelscope.cn/studio ... lors-Virtual-Try-On 参考&#xff1a; 一键AI换衣-可图AI试衣 https://www.jinsh…

Unity数据持久化 之 Xml入门精要 (从语法入门到序列与反序列化)

该教程资源来源于唐老狮&#xff0c;仅作学习分享交流 学习xml是因为看到了uitookit里出现了uxml 所以来学习一下 1.xml结构 2.基础语法 注释与开头固定写法 <!--第1行 注释格式 第2行代表版本和编码格式&#xff0c;是固定写法--> <?xml version"1.0" …

在 Bash 中获取 Python 模块变量列

在 Bash 中获取 Python 模块的变量列表可以通过使用 python -c 来运行 Python 代码并输出变量名列表。 1、问题背景 在编写 Bash 补全脚本时&#xff0c;需要获取已安装 Python 模块中与模式匹配的所有变量。为了避免解析注释等内容&#xff0c;希望仅使用 Python 相关功能。 …

Xserver v1.4.2发布,支持自动重载 nginx 配置

Xserver——优雅、强大的 php 集成开发环境 本次更新为大家带来了更好的用户体验。 &#x1f389; 下载依赖组件时&#xff0c;显示进度条&#xff0c;展示下载进度。 &#x1f389; 保存站点信息和手动修改 vhost 配置文件之后&#xff0c;自动重载 nginx 配置 &#x1f41e…

记录————封装vue3+element-plus(el-upload)上传图片组件

AI介绍&#xff1a; 显示已上传的图片列表&#xff0c;并提供删除和预览功能。支持上传新的图片&#xff0c;并在上传成功后显示在列表中。 代码的具体步骤如下&#xff1a; 在模板中&#xff0c;使用v-for指令遍历imageUrls数组&#xff0c;显示已上传的图片&#xff0c;并…

ssm060基于SSM的高校共享单车管理系统的设计与实现+vue(论文+源码)_kaic

设计题目&#xff1a;高校共享单车管理系统的设计与实现 摘 要 网络技术和计算机技术发展至今&#xff0c;已经拥有了深厚的理论基础&#xff0c;并在现实中进行了充分运用&#xff0c;尤其是基于计算机运行的软件更是受到各界的关注。加上现在人们已经步入信息时代&#xff0…

FastReport将停止 .NET Framework 上的 WebReport 更新

从2024/ 12 /1 日起&#xff0c;Fastreport将停止发布更新和提供对 FastReport.Web (.NET Framework) 的技术支持。该库一直是使用 Online Designer 的许多项目中报告的核心。这些更改意味着 FastReport.Web (Legacy) 库&#xff08;FastReport.Net包的一部分&#xff09;将不再…

FPGA高速设计之Aurora64B/66B的应用与不足的修正

FPGA高速设计之Aurora64B/66B的应用与不足的修正 Aurora IP协议的特点 首先基于网上找到的一些资料&#xff0c;来讲述下Aurora高速协议的特点与相关的应用。Aurora 协议在 2002 年由 Xilinx 公司首次提出&#xff0c;是由Xilinx提供的一个开源、免费的链路层串行传输通信协议…

【力扣打卡系列】单调栈

坚持按题型打卡&刷&梳理力扣算法题系列&#xff0c;语言为go&#xff0c;Day20 单调栈 题目描述 解题思路 单调栈 后进先出 记录的数据加在最上面丢掉数据也先从最上面开始 单调性 记录t[i]之前会先把所有小于等于t[i]的数据丢掉&#xff0c;不可能出现上面大下面小的…