精华内容
下载资源
问答
  • SQL 同比环比计算公式及实例演示
    千次阅读
    2021-04-01 23:48:21

    同比数据计算公式:

    同比:一般情况下是今年第n月与去年第n月比
    计算方式:同比增长率=(本期数-同期数)
    ÷同期数×100%
    所以要有个本期数据与同期数据一一对应的表,那就要本期数据与同期数据分离

    环比数据计算公式:
    环比:一般是指报告期水平与前一时期水平之比,此处指本月数据与上月数据(或者本日数据与上日数据)
    计算方式:环比增长速度=(本期数-上期数)÷上期数×100%

     

    CREATE TABLE SalesDetail(
    ID int,   --序号
    DepartName varchar(50), --部门
    Sales decimal(10,2), --销售量
    SalesDate Datetime --销售日期
    )
    
    insert into SalesDetail(ID, DepartName, Sales, SalesDate)
    select 1, '营销一部', 300, '2006-7-1'
    UNION ALL select 2, '营销二部', 500, '2006-7-1'
    UNION ALL select 3, '营销三部', 800, '2006-8-1'
    UNION ALL select 4, '营销一部', 600, '2006-8-1'
    UNION ALL select 5, '营销二部', 800, '2006-8-1'
    UNION ALL select 6, '营销一部', 400, '2007-7-1'
    UNION ALL select 7, '营销二部', 800, '2007-7-1'
    UNION ALL select 8, '营销三部', 700, '2007-8-1'
    UNION ALL select 9, '营销一部', 600, '2008-7-1'
    UNION ALL select 10, '营销二部', 700, '2008-7-1'
    
    select * from SalesDetail
    
    -- 计算环比
    select c.DepartName as 部门, convert(varchar(10), c.SalesDate, 23) as 对比年月, c.Sales as 本月销售总量, d.Sales as 上月销售总量, case when d.Sales is null or d.Sales=0 then '无穷大' else cast(cast((isnull(c.Sales, 0)-isnull(d.Sales,0))*100/isnull(d.Sales, 0) as decimal(10,2)) as varchar(50))+'%' end as 环比 from SalesDetail c left join
    (select a.DepartName as DepartName, a.Sales as Sales, a.SalesDate as lsSalesDate, b.SalesDate as SalesDate from SalesDetail a join SalesDetail b on a.SalesDate=DateAdd(month, -1, b.SalesDate) and a.DepartName=b.DepartName) d
    on c.SalesDate=d.SalesDate and c.DepartName=d.DepartName
    
    -- 计算同比
    select c.DepartName as 部门, convert(varchar(10), c.SalesDate, 23) as 对比年月, c.Sales as 本月销售总量, d.Sales as 去年同期销售总量, case when d.Sales is null or d.Sales=0 then '无穷大' else cast(cast((isnull(c.Sales, 0)-isnull(d.Sales,0))*100/isnull(d.Sales, 0) as decimal(10,2)) as varchar(50))+'%' end as 同比 from SalesDetail c left join
    (select a.DepartName as DepartName, a.Sales as Sales, a.SalesDate as lsSalesDate, b.SalesDate as SalesDate from SalesDetail a join SalesDetail b on a.SalesDate=DateAdd(year, -1, b.SalesDate) and a.DepartName=b.DepartName) d
    on c.SalesDate=d.SalesDate and c.DepartName=d.DepartName

    同比效果:

    环比效果:

    更多相关内容
  • SQL 同比环比

    2022-01-04 14:08:24
    描述 数据来源使用frdemo的订单明细和订单表 效果图 ...三、在SQL计算同环比,不在单元格内计算与过滤 select t.m,t.ym, t.销量, t1.销量 同期, (case when t1.销量 is null then...

    描述 数据来源使用frdemo的订单明细和订单表

    效果图

    一、下拉框选择年份参数筛选

    select distinct strftime('%Y',订购日期) as year from 订单 order by year asc

    二、页面隔行变色

    条件属性隔行变色

    三、在SQL中计算同环比,不在单元格内计算与过滤


    select t.m,t.ym,

          t.销量,

          t1.销量 同期,

          (case when t1.销量 is null then '' 

              else (t.销量-t1.销量)/t1.销量 end) 同比,

          t2.销量 上期,

          (case when t2.销量 is null then '' 

              else (t.销量-t2.销量)/t2.销量 end) 环比

    from 

    (

    select strftime('%m',b.订购日期)+0 m,

          strftime('%Y-%m',b.订购日期) ym,

          sum(a.数量) 销量

    from 订单明细 a

        left join 订单 b on a.订单ID=b.订单ID

    where strftime('%Y',b.订购日期) = '1997'

    group by strftime('%Y-%m',b.订购日期)

    ) t   -- 1997年 m月份 ym年月 销量 销售额

    left join

    (

    select strftime('%m',b.订购日期)+0 m,

          strftime('%Y-%m',b.订购日期) ym,

          sum(a.数量) 销量

    from 订单明细 a

        left join 订单 b on a.订单ID=b.订单ID

    where strftime('%Y',b.订购日期) = '1996'

    group by strftime('%Y-%m',b.订购日期)

    ) t1 on t.m=t1.m  -- 1996 年 m月份 ym年月 销量 销售额

    left join

    (

    select (case when strftime('%m',b.订购日期)+0 <=11

            then strftime('%m',b.订购日期)+1 end) m, -- 1997年 使用then判断 ym中月份小于等于11 将月份+1

          strftime('%Y-%m',b.订购日期) ym,

          sum(a.数量) 销量

    from 订单明细 a

        left join 订单 b on a.订单ID=b.订单ID

    where strftime('%Y',b.订购日期) = '1997'

    group by strftime('%Y-%m',b.订购日期)

    union

    select (case when strftime('%m',b.订购日期)+0 =12

            then 1 end) m,

          strftime('%Y-%m',b.订购日期) ym,

          sum(a.数量) 销量

    from 订单明细 a

        left join 订单 b on a.订单ID=b.订单ID

    where strftime('%Y',b.订购日期) = '1996'

    group by strftime('%Y-%m',b.订购日期)

    ) t2 on t.m=t2.m

    四、比例为负时加粗标红

     颜色+字体 没有生效

     背景颜色 + 字体 生效

    解决方法 条件属性分开设置

    先加粗 先显示红色 先后顺序好像导致最终显示有所出入 (咱也不知道这是为啥)

    需要先加粗显红才能达到下图显示效果

    如果是先显红 后加粗 最终结果显示只是加粗的情况

     

     

    效果图

     五、标题随年份动态显示

    将三、步骤中年份替换参数名

    展开全文
  • SQL 同比环比增长率计算

    千次阅读 2019-11-08 14:14:08
    同比: SELECT DISTINCT B.dateM,B.dateY,B.Total,B.Total+B.Total*AVG( B.per ) OVER ( PARTITION BY B.dateM ) as predictionTotal , AVG( B.per ) OVER ( PARTITION BY B.dateM ) AS [AvgPer] ,MA...

    同比:

    SELECT DISTINCT
        B.dateM,B.dateY,B.Total,B.Total+B.Total*AVG( B.per ) OVER ( PARTITION BY B.dateM ) as predictionTotal
        ,    AVG( B.per ) OVER ( PARTITION BY B.dateM ) AS [AvgPer]
        ,MAX( B.per ) OVER ( PARTITION BY B.dateM ) AS [MaxPer]
        ,Min( B.per ) OVER ( PARTITION BY B.dateM ) AS [MinPer] from 
        (SELECT A.dateM,A.dateY
     ,A.[Total] - A.[PreviousTotal] as GrowthTotal,(A.[Total] - A.[PreviousTotal])/A.[PreviousTotal] as per,A.[Total]
    ,    A.[Month]
    FROM 
    (
    select s.dateM,dateY,COUNT(*) OVER ( PARTITION BY s.dateM ) AS [Month],s.[Total]  AS [Total]
    ,     LAG( s.[Total] ) OVER ( PARTITION BY s.dateM ORDER BY s.dateY ) AS [PreviousTotal] 
            from (SELECT datepart(mm,[month]) as dateM, datepart(yyyy,[month]) as dateY,sum([Total]) Total
    FROM [KS_DataBase3.0_QJ].[dbo].[KS_MonthVbt] where [Month]>='2017' and [Month]<'2019'
    GROUP BY [month]) s 
    ) AS A
    ) B 

     

    环比计算比较简单

     

      SELECT o.*
    FROM (SELECT o.*, 
                 (total / LAG(total) OVER (ORDER BY month) - 1) as growth
          FROM [KS_DataBase3.0_QJ].[dbo].[KS_MonthVbt] o
         ) o
    WHERE [Month] <= '2019-10-01'
    ORDER BY [Month];

    展开全文
  • 关于SQL同比环比

    千次阅读 2020-09-22 09:49:21
    同比环比的意思 同比 ...同比环比计算公式 同比发展速度 同比发展速度 = 本期发展水平 / 去年同期水平 × 100% 同比增长速度 同比增长速度 =(本期发展水平-去年同期水平)/ 去年同期

    同比和环比的意思

    • 同比

    一般情况下是今年第n月与去年第n月比。同比发展速度主要是为了消除季节变动的影响,用以说明本期发展水平与去年同期发展水平对比而达到的相对发展速度。如,本期2月比去年2月,本期6月比去年6月等。

    • 环比

    表示连续2个单位周期(比如连续两月)内的量的变化比。环比包括两种:环比增长速度和环比发展速度。

    同比和环比的计算公式

    • 同比发展速度

    同比发展速度 = 本期发展水平 / 去年同期水平 × 100%

    • 同比增长速度

    同比增长速度 =(本期发展水平-去年同期水平)/ 去年同期水平 × 100%

    在实际工作中,经常使用这个指标,如某年、某季、某月与上年同期对比计算的发展速度,就是同比发展速度。

    • 环比增长率

    (本期数-上期数)/上期数×100%

    反映本期比上期增长了多少

    环比发展速度,一般是指报告期水平与前一时期水平之比,表明现象逐期的发展速度

    • 同比增长率

    同比增长率 =(本期数-同期数)/ |同期数| × 100%。

    同比和环比的区别

    • 同比是本期与同期做对比,环比是本期与上期做对比。
    • 环比一般是用在月、日很少用在年上,主要是对比很短时间内涨幅程度,不过由于行业差异,比如旅游,会受到淡旺季影响。
    • 同比一般用在相邻两年,相同时间段内,查看涨幅程度,一般用在两年相同月份,很少用在两月相同日期。

    表结构

    在这里插入图片描述

    1.得到同比数据

    在这里插入图片描述

    2.选择月份 获取环比数据

    在这里插入图片描述

    建表

    CREATE TABLE `SalesDetail` (
    `ID` int,
    `DepartName` VARCHAR(50),
    `Sales` DECIMAL (10, 2),
    `SalesDate` datetime 
    );
    
    insert into SalesDetail(ID, DepartName, Sales, SalesDate)
    
    select 1, '营销一部', 300, '2006-7-1'
    UNION ALL select 2, '营销二部', 500, '2006-7-1'
    UNION ALL select 3, '营销三部', 800, '2006-8-1'
    UNION ALL select 4, '营销一部', 600, '2006-8-1'
    UNION ALL select 5, '营销二部', 800, '2006-8-1'
    UNION ALL select 6, '营销一部', 400, '2007-7-1'
    UNION ALL select 7, '营销二部', 800, '2007-7-1'
    UNION ALL select 8, '营销三部', 700, '2007-8-1'
    UNION ALL select 9, '营销一部', 600, '2008-7-1'
    UNION ALL select 10, '营销二部', 700, '2008-7-1'
    

    答案

    -- 得到环比
    
    select c.DepartName as 部门, convert(varchar(10), c.SalesDate, 23) as 对比年月, 
     c.Sales as 本月销售总量, d.Sales as 上月销售总量, 
     case when d.Sales is null or d.Sales=0 then '无穷大' else cast(cast((isnull(c.Sales, 0)-isnull(d.Sales,0))*100/isnull(d.Sales, 0) as decimal(10,2)) as varchar(50))+'%' end 
     as 环比 from SalesDetail c left join
     (select a.DepartName as DepartName, a.Sales as Sales, a.SalesDate as lsSalesDate, b.SalesDate as SalesDate from SalesDetail a join SalesDetail b on a.SalesDate=DateAdd(month, -1, b.SalesDate) and a.DepartName=b.DepartName) d
    
    on c.SalesDate=d.SalesDate and c.DepartName=d.DepartName
    
    
    -- 得到同比
    
    select c.DepartName as 部门, convert(varchar(10), c.SalesDate, 23) as 对比年月, 
     c.Sales as 本月销售总量, d.Sales as 去年同期销售总量, 
     case when d.Sales is null or d.Sales=0 then '无穷大' else cast(cast((isnull(c.Sales, 0)-isnull(d.Sales,0))*100/isnull(d.Sales, 0) as decimal(10,2)) as varchar(50))+'%' end as 同比 
     from SalesDetail c left join
     (select a.DepartName as DepartName, a.Sales as Sales, a.SalesDate as lsSalesDate, b.SalesDate as SalesDate from SalesDetail a join SalesDetail b on a.SalesDate=DateAdd(year, -1, b.SalesDate) and a.DepartName=b.DepartName) d
    
    on c.SalesDate=d.SalesDate and c.DepartName=d.DepartName
    
    
    -- SQL语句说明
    
    //获取根据时间获取去年同期时间
    select DateAdd(year, -1, SalesDate)
    
    //获取根据时间获取上月时间
    select DateAdd(month, -1, SalesDate)
    
    //获取根据时间获取去年同期时间数据
    select a.DepartName as DepartName, a.Sales as Sales, a.SalesDate as lsSalesDate, b.SalesDate as SalesDate 
     from SalesDetail a join SalesDetail b on a.SalesDate=DateAdd(year, -1, b.SalesDate) 
     and a.DepartName=b.DepartName
    
    //获取根据时间获取上月时间数据
    select a.DepartName as DepartName, a.Sales as Sales, a.SalesDate as lsSalesDate, b.SalesDate as SalesDate 
     from SalesDetail a join SalesDetail b on a.SalesDate=DateAdd(month, -1, b.SalesDate) 
     and a.DepartName=b.DepartName
    
    
    展开全文
  • sql语句下的同比环比操作

    万次阅读 多人点赞 2020-07-01 00:44:26
    需求:查询2020年,每月的销售额,以及同比环比,并按照年月进行升序排序 建数据库 建表 插入数据 偷个懒,这些语句就先省略了 给看个截图 ps: 建表时时间要选择datetime ,后面要对时间进行操作的~ 思路:分步操作 ...
  • 本篇文章是对oracle求同比,环比函数(LAG与LEAD)进行了详细的分析介绍,需要的朋友参考下
  • SQL同比 环比

    2020-12-30 07:22:44
    800 2006-8-1 6 营销一部 400 2007-7-1 7 营销二部 800 2007-7-1 8 营销三部 700 2007-8-1 9 营销一部 600 2008-7-1 10 营销二部 300 2008-7-1 2、要根据要求得到以下数据 1)得到同比数据 部门 ...
  • sum和case when的结合使用 ...如果我们需要求男生的人数是女生的多少倍怎么计算? 3.求男生的人数是女生的多少倍(sum和case when的结合使用) select "男生人数", "女生人数", "男生人数" /
  • mysql:一条sql语句统计环比同比

    万次阅读 2019-01-07 11:10:33
    统计各个景区的入园人数、销售额以及入园人数和销售额的同比 以月度为例子同比为例;环比类似 思路分析:表a首先统计出当月的入园人数、销售额,表b统计出同期的入园人数、销售额(在a的基础上减去一年,可),...
  • sqlserver 计算同比,环比增长

    千次阅读 2019-09-27 02:30:03
    同比增长 order by fdSequenceID,id asc   环比增长: WITH f AS ( SELECT ROW_NUMBER() OVER ( partition by fdSequenceID ORDER BY fdTime) AS id, * FROM [ NewDBTest...
  • Hive实现同比环比计算

    千次阅读 2022-02-25 11:50:00
    Hive实现同比环比计算同比环比的计算销售量的月年占比同比环比lead lag 的实现自关联的实现 同比环比的计算 测试数据 1,2020-04-20,420 2,2020-04-04,800 3,2020-03-28,500 4,2020-03-13,100 5,2020-02-27,300 6,...
  • SQL计算环比、周同比

    千次阅读 2019-11-10 20:43:45
    计算环比、周同比 范例表格如下: 这是面试问到的一个问题,回来学习之后了解可以用这个函数: 代码如下: select date,gmv,(gmv-gmv_1)/gmv_1,(gmv-gmv_7)/gmv_7 from (select date,gmv, lead(gmv,1) over...
  • Mysql计算同比环比(超详细)

    千次阅读 热门讨论 2020-09-11 20:52:17
    sql如下 CREATE TABLE sales ( `产品ID` int NOT NULL, `销售数量` int(20) , `销售时间` timestamp(6) NULL DEFAULT NULL, PRIMARY KEY (`订单ID`) ) INSERT INTO sales VALUES ('C1001', 15, '2020-06-01 ...
  • Java计算同比环比

    千次阅读 2020-08-31 14:39:28
    Java计算同比环比 同比环比计算基本概念和计算公式 同比率:本年数据比上一年数据增长或减少的比率 同比率计算公式:rate = (本年数据 - 前一年数据) / 前一年数据 实例:2020年10月游客数量为80W,2019年10月游客...
  • ORACLE计算同比环比

    千次阅读 多人点赞 2020-07-06 14:19:18
    同比环比概念和公式 同比: 同比一般情况下是今年第n月与去年第n月比 环比: 表示连续2个统计周期(比如连续两月)内的量的变化比。 同比增长率=(本期数-同期数)/|同期数|×100% 环比增长率=(本期数-上期数)/上期...
  • 800 2006-8-1 6 营销一部 400 2007-7-1 7 营销二部 800 2007-7-1 8 营销三部 700 2007-8-1 9 营销一部 600 2008-7-1 10 营销二部 300 2008-7-1 2、要根据要求得到以下数据 1)得到同比数据 部门 ...
  • MySQL 计算同比环比

    2021-01-15 21:03:20
    使用 case when 语句计算这张联合表相应列的比值, 即为同比环比数据 实际语句示例: # 计算同比 select s1.id,currDate,currSum currSumFee,prevDate,prevSum prevSumFee, CASE WHEN prevSum>0 THEN (currSum-...
  • 稍加分析可知,这是一道典型的求同比环比类型的题目。 知识点梳理同比一般情况下是今年第n月与去年第n月比。同比发展速度主要是为了消除季节变动的影响,用以说明本期发展水平与去年同期发展水平对比而达到的相对...
  • 给出某一个日期,用SQL分别计算日、月、季度、年下的同比环比
  • MySQL统计同比环比SQL

    2020-12-20 13:07:04
    大体思路:MySQL没有类似oracle方便的统计函数,只能靠自己去硬计算:通过时间字段直接增加年份、月份,然后通过left join关联时间字段去计算环比同比公式即可原始表结构:求同比SQL:--按年同比SELECTt5.*,...
  • MySQL计算同比环比

    千次阅读 2022-03-17 15:43:50
    MySQL计算同比环比 今天在做数据建模的时候,ads层的需求中有个叫同比和环比的指标,这两指标的计算之前都没有接触过,经过我两三个小时的研究,终于搞明白什么是同比,什么是环比,如何使用Mysql来计算同比环比...
  • Impala sql实现同比计算(lag函数)

    千次阅读 2021-08-06 14:47:58
    与上年度同月数据对比称"同比",与上月数据对比称"环比" 同比的话,如果每个月都齐全,都有数据lag(num,12)就可以了,空值的话,使用lag()函数的第三个参数。 select t2.index_name,t2.new_index_code,t2.now_...
  • AS PREV_SAL -- 环比分析,与上个月份进行比较 ,LAG(SALARY, 12, 0) OVER(PARTITION BY EMPLOYEENO ORDER BY YEARMONTH) AS PREV_12_SAL -- 同比分析,与上个年度相同月份进行比较 ,SUM(SALARY) OVER(PARTITION BY ...
  • 1.普及一下概念环比 = 2018年10月/2018年09月(同一时期内不同时间段的比较)同比 = 2018年10月/2017年10月(不同时期内相同时间段的比较)环比增长率 =(2018年10月-2018年09月)/2018年09月同比增长率 =(2018年10月-2017...
  • SQL计算月环比、月同比

    千次阅读 2020-08-17 17:51:37
    在工作的过程中,经常会使用到环比同比,那关于如何用SQL去写环比同比呢?非常简单,用interval函数,轻松实现。 interval 1 month,环比 interval 1 year ,同比 一、准备数据 为了快速理解,我建了一个表,关于...
  • SQL 计算同比、月环比

    千次阅读 2021-07-28 15:02:10
    SQL 计算同比、月环比情景月环比的计算逻辑月同比计算逻辑详细步骤 情景 查找2019年各个月份的入职以及去年同期的入职,结果包括四列: 【年月,入职人数,上月入职人数,去年同期入职人数】 所用数据: DROP ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,345
精华内容 538
关键字:

sql计算同比环比

友情链接: A_algorithm_in_BP.rar