ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

SQL求同比增长率

2021-12-06 18:00:06  阅读:364  来源: 互联网

标签:01 增长率 sales report 同比 test 日期 SQL date


一、业务背景及口径说明

假设现在有下方这两张表(sales和dim_date),我们需要通过它们计算销售额同比增长率。

 

 

 第一张表是 sales(销售表),记录日期和日期对应的销售额;
第二张表是dim_date(日期维表),记录日期对应的可比日期(这里是去年同月同天)。

 

公式如下:

当日销售额同比增长率=(当日销售额 - 去年同月同天销售额) / 去年同月同天销售额* 100

 

那么我们该怎么写 sql 来计算这个同比增长率呢?

二、计算逻辑

计算逻辑:

  1. 先用销售表关联日期维表,获得每天的可比日期(如2020-01-03的可比日期为2019-01-03),再用上述结果表关联销售表,得到可别日期对应的销售额;
  2. 根据统计口径可直接求得。

2.1 MySQL实战

2.1.1 数据导入
-- DDL: sales
drop table if exists test.sales;
create table test.sales (
    report_date date comment '日期'
  , sales_amt double comment '销售额'
) engine=innodb default charset=utf8
;
-- Insert Data
insert into test.sales(
    report_date
  , sales_amt
)
values('2020-01-03', '1000')
    , ('2020-01-02', '800')
    , ('2019-01-03', '900')
    , ('2019-01-02', '1100')
;
-- DDL: dim_date
create table test.dim_date (
    report_date date comment '日期'
  , date_yoy date comment '去年同月同天'
) engine=innodb default charset=utf8
;
-- Insert Data
insert into test.dim_date(
    report_date
  , date_yoy
)
values('2020-01-03', '2019-01-03')
    , ('2020-01-02', '2019-01-02')
;
2.1.1 计算逻辑实现
select a.report_date
 , 100* (a.sales_amt - c.sales_amt) / c.sales_amt  '可比增长率'
from test.sales a
    left join test.dim_date b on a.report_date = b.report_date
    left join test.sales c on b.date_yoy = c.report_date

 

标签:01,增长率,sales,report,同比,test,日期,SQL,date
来源: https://www.cnblogs.com/luxj/p/15651029.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有