成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

SQL案例分析:環比、同比以及復合增長率

數據庫 SQL Server
除了我們已經介紹過的聚合窗口函數(AVG、SUM等)和排名窗口函數(ROW_NUMBER、RANK等)之外,還有一類常用的SQL窗口函數:取值窗口函數。

除了我們已經介紹過的聚合窗口函數(AVG、SUM等)和排名窗口函數(ROW_NUMBER、RANK等)之外,還有一類常用的SQL窗口函數:取值窗口函數。

取值窗口函數可以用于返回分析窗口內指定位置的數據記錄,常見的取值窗口函數如下:

  • LAG()函數可以返回窗口內當前行之前的第N行數據。
  • LEAD()函數可以返回窗口內當前行之后第N行數據。
  • FIRST_VALUE()函數可以返回窗口內第一行數據。
  • LAST_VALUE()函數可以返回窗口內最后一行數據。
  • NTH_VALUE()函數可以返回窗口內第N行數據。

其中,LAG()和LEAD()函數不支持動態的窗口大小,它們以整個分區作為分析的窗口。

環比、同比分析

環比增長是指本期數據與上期數據相比的增長,例如產品2019年6月份的銷量與2019年5月份的銷量相比增加的部分。

以下語句統計了各種產品每個月份的環比增長率:

SELECT product AS "產品", ym "年月", amount "銷量",
       ((amount - LAG(amount,1) OVER (PARTITION BY product ORDER BY ym))/
       LAG(amount, 1) OVER(PARTITION BY product ORDER BY ym)) * 100
       AS "環比增長率(%)"
FROM sales_monthly
ORDER BY product, ym;

其中,LAG(amount, 1)表示獲取上一期的銷量,PARTITION BY選項表示按照產品分區,ORDER BY選項表示按照月份進行排序。當前月份的銷量amount減去上一期的銷量,再除以上一期的銷量,就是環比增長率。

該查詢返回的結果如下:

產品|年月   |銷量     |環比增長率(%)
---|------|--------|------------
桔子|201801|10154.00|        
桔子|201802|10183.00| 0.285602
桔子|201803|10245.00| 0.608858
...
香蕉|201904|11408.00| 1.063076
香蕉|201905|11469.00| 0.534712
香蕉|201906|11528.00| 0.514430

2018年1月份是第一期,因此環比增長率為空。“桔子”2018年2月份的環比增長率為0.2856%((10183 - 10154) / 10154 * 100),其他的數據依此類推。

同比增長是指本期數據與上一年度或歷史同期相比的增長,例如產品2019年6月份的銷量與2018年6月份的銷量相比增加的部分。

以下語句統計了各種產品每個月份的同比增長率:

SELECT product AS "產品", ym "年月", amount "銷量",
       ((amount - LAG(amount,12) OVER (PARTITION BY product ORDER BY ym))/
       LAG(amount, 12)OVER (PARTITION BY product ORDER BY ym)) * 100
       AS "同比增長率(%)"
FROM sales_monthly
ORDER BY product, ym;

其中,LAG(amount, 12)表示當前月份之前第12期的銷量,也就是去年同月份的銷量。PARTITION BY選項表示按照產品分區,ORDER BY選項表示按照月份進行排序。當前月份的銷量amount減去去年同期的銷量,再除以去年同期的銷量,就是同比增長率。

該查詢返回的結果如下:

產品|年月   |銷量     |同比增長率(%)
---|------|--------|------------
桔子|201801|10154.00|        
桔子|201802|10183.00|        
桔子|201803|10245.00|        
...
桔子|201901|11099.00| 9.306677
桔子|201902|11181.00| 9.800648
桔子|201903|11302.00|10.317228
...

2018年的12期數據都沒有對應的同比增長率,“桔子”2019年1月份的同比增長率為9.3067((11099 - 10154) / 10154 * 100),其他的數據依此類推。

提示:LEAD()函數與LAG()函數的使用方法類似,不過它的返回結果是當前行之后的第N行數據。

復合增長率

復合增長率是第N期的數據除以第一期的基準數據,然后開N-1次方再減去1得到的結果。

假如2018年的銷量為10000元,2019年的銷量為12500元,2020年的銷量為15000元。那么這兩年的復合增長率的計算方式如下:

(15000/10000)(1/2) - 1 = 22.47%

以年度為單位計算的復合增長率稱為年均復合增長率,以月度為單位計算的復合增長率稱為月均復合增長率。

以下查詢統計了自2018年1月以來不同產品的月均銷量復合增長率:

WITH s(product, ym, amount, first_amount, num) AS (
  SELECT product, ym, amount,
       FIRST_VALUE(amount) OVER(PARTITION BY product ORDER BY ym),
       ROW_NUMBER() OVER(PARTITION BY product ORDER BY ym)
  FROM sales_monthly
)
SELECT product AS "產品", ym "年月", amount "銷量",
      (POWER(1.0*amount/first_amount, 1.0/NULLIF(num-1, 0)) - 1) * 100
       AS "月均復合增長率(%)"
FROM s
ORDER BY product, ym;

我們首先定義了一個通用表表達式,其中FIRST_VALUE(amount)返回了第一期(201801)的銷量,ROW_NUMBER()函數返回了每一期的編號。主查詢中的POWER()函數用于執行開方運算,NULLIF()函數用于處理第一期數據的除零錯誤,常量1.0用于避免整數除法導致的精度丟失問題。

該查詢返回的結果如下:

產品|年月   |銷量     |月均復合增長率(%)
---|------|--------|-----------------
桔子|201801|10154.00|                  
桔子|201802|10183.00| 0.285602
桔子|201803|10245.00| 0.447100
桔子|201804|10325.00| 0.558233
桔子|201805|10465.00| 0.757067
桔子|201806|10505.00| 0.681987
...

2018年1月份是第一期,因此月均銷量復合增長率為空。“桔子”2018年2月份的月均銷量復合增長率等于它的環比增長率,2018年3月份的月均銷量復合增長率等于0.4471%。其他的數據依此類推。

以下語句統計了不同產品最低銷量、最高銷量以及第三高銷量所在的月份:

SELECT product AS "產品", ym "年月", amount "銷量",
       FIRST_VALUE(ym)OVER (
         PARTITION BY product ORDER BY amount DESC
         ROWS BETWEEN UNBOUNDED PRECEDING ANDUNBOUNDED FOLLOWING)
         AS "最高銷量月份",
       LAST_VALUE(ym) OVER(
         PARTITION BY product ORDER BY amount DESC
         ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
         AS "最低銷量月份",
       -- Microsoft SQL Server 不支持 NTH_VALUE
       NTH_VALUE(ym, 3)OVER (
         PARTITION BY product ORDER BY amount DESC
         ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
         AS "第三高月份"
FROM sales_monthly
ORDER BY product, ym;

三個窗口函數的OVER子句相同,PARTITION BY選項表示按照產品進行分區,ORDERBY選項表示按照銷量從高到低排序。

以上三個函數的默認窗口都是從分區的第一行到當前行,因此我們將窗口擴展到了整個分區。該查詢返回的結果如下:

產品|年月   |銷量 |最高銷量月份|最低銷量月份|第三高月份
---|------|-----|----------|----------|---------
桔子|201801|10154|201906    |201801    |201904
桔子|201802|10183|201906    |201801    |201904
桔子|201803|10245|201906    |201801    |201904
桔子|201804|10325|201906    |201801    |201904
桔子|201805|10465|201906    |201801    |201904
桔子|201806|10505|201906    |201801    |201904
...

“桔子”的最高銷量出現在2019年6月份,最低銷量出現在2018年1月份,第三高銷量出現在2019年4月份。

Microsoft SQL Server目前還不支持NTH_VALUE()窗口函數,因此無法得到銷量第三高的月份。

責任編輯:華軒 來源: SQL編程思想
相關推薦

2020-04-24 09:47:39

Python數據增長率

2022-09-15 09:45:46

衛星物聯網物聯網

2022-10-14 11:55:29

2016-07-06 15:33:22

SDN

2011-07-12 14:01:22

2011云計算峰會云計算市場

2021-05-21 10:09:56

零信任網絡安全網絡攻擊

2022-11-03 10:29:11

物聯網

2024-03-04 14:46:07

邊緣計算邊緣安全

2022-10-27 09:25:51

物聯網物聯網市場

2016-05-17 15:08:42

Hadoop

2012-03-06 09:19:28

云計算孫丕恕

2013-04-09 15:53:50

華為TCT企業財報

2015-11-05 11:45:35

物聯網復合增長率

2024-05-15 11:51:40

經營分析業務產品

2023-08-26 20:41:34

策略經營分析角度

2023-05-18 15:19:50

2022-05-18 10:01:02

公有云市場IDC數字化轉型

2020-11-16 15:47:57

數據中心網絡技術

2023-07-30 14:45:00

2021-01-16 16:26:08

Docker容器安全
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: www.日本在线播放 | 国产成人精品久久 | 国产精品福利在线观看 | 久久久久久久久久久成人 | 国产精品久久久久久影视 | 久久精品成人 | 夜夜草视频 | 伊人伊人网 | 日韩精品一区二区三区在线播放 | 美女爽到呻吟久久久久 | 911影院 | 国产精品一区二区在线 | 欧美精品综合在线 | 国产精品一区在线观看 | 91丨九色丨国产在线 | 欧美成人高清视频 | 中文字幕免费视频 | 国产96在线 | 欧美日本韩国一区二区 | 日韩α片| 国产一区亚洲二区三区 | 中文字幕1区 | 二区中文字幕 | 精品真实国产乱文在线 | 免费久久99精品国产婷婷六月 | 国产福利一区二区 | 国产日韩一区二区 | 久久成人免费 | h视频免费在线观看 | av片网站 | 亚洲黄色视屏 | 日本在线看片 | 日本高清视频在线播放 | 草久久免费视频 | 国产精品免费在线 | 国产精品欧美一区二区三区不卡 | jlzzjlzz国产精品久久 | 日韩影音| 亚洲视频免费一区 | 久久久久久久一区二区三区 | www.色综合|