MySQL之环比问题

一,概念

环比就是这个月比上个月,单位不一定是月,可以是任何时间单位。

环比计算方式:环比增长速度 =(本期数-上期数)÷ 上期数×100%

二,数据准备

我们有两张表

一张表有book_id(书id) sale(销售数量) time(销售时间)

另一张 book_id(书id) price(单价)

三,计算环比

3.1

首先将两张表进行关联,算出每一月份的交易总额,在日期中取出月份

select book.book_id,month(sale_time) month,sum(sale * num)money
from book join book_price bp on book.book_id = bp.book_id
group by book.book_id,sale_time

3.2

使用lag()over()取出上一月份的总额添加新字段,

with tb1 as (
select book.book_id,month(sale_time) month,sum(sale * num)money
from book join book_price bp on book.book_id = bp.book_id
group by book.book_id,sale_time)
# tb2 as(
select book_id,month ,money 本期,
       lag(money,1) over (order by month )上一期   
# lag(需要取的字段,行数)over(按照月份升序进行排序)
 from tb1 group by book_id, month, money;

3.3

接上一步结果,就可以使用环比公式 环比增长速度 =(本期数-上期数)÷ 上期数×100% 截取字段进行计算,if()对数据进行判断,如果是空的,显示上期没有数据结果,不让他显示null

with tb1 as (
select book.book_id,month(sale_time) month,sum(sale * num)money
from book join book_price bp on book.book_id = bp.book_id
group by book.book_id,sale_time),
tb2 as(
select book_id,month ,money 本期,
       lag(money,1) over (order by month )上一期
 from tb1 group by book_id, month, money)
select month,本期,if(上一期 is null ,'上一期没有数据',上一期)上一期,
       if(round((本期-上一期)/上一期 * 100,3) is null ,'上一期没有数据',round((本期-上一期)/上一期 * 100,3))  as 环比
from tb2;

  • 6
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值