日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 综合教程 >内容正文

综合教程

SQL窗口函数详解之排名窗口函数的使用(sql窗口函数)

發(fā)布時(shí)間:2023/12/24 综合教程 20 生活家
生活随笔 收集整理的這篇文章主要介紹了 SQL窗口函数详解之排名窗口函数的使用(sql窗口函数) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本篇文章給大家?guī)?lái)了關(guān)于SQL server的相關(guān)知識(shí),其中主要介紹了SQL Server主鍵約束(PRIMARY KEY),主鍵是唯一標(biāo)識(shí)表中每一行的一列或一組列,文章圍繞主題展開(kāi)詳情,下面一起來(lái)看一下,希望對(duì)大家有幫助。

推薦學(xué)習(xí):《SQL教程》

關(guān)于窗口函數(shù)的基礎(chǔ),請(qǐng)看文章SQL窗口函數(shù)

取值窗口函數(shù)可以用于返回窗口內(nèi)指定位置的數(shù)據(jù)行。常見(jiàn)的取值窗口函數(shù)如下:

LAG函數(shù)可以返回窗口內(nèi)當(dāng)前行之前的第N行數(shù)據(jù)。LEAD函數(shù)可以返回窗口內(nèi)當(dāng)前行之后的第N行數(shù)據(jù)。FIRST_VALUE函數(shù)可以返回窗口內(nèi)第一行數(shù)據(jù)。LAST_VALUE函數(shù)可以返回窗口內(nèi)最后一行數(shù)據(jù)。NTH_VALUE函數(shù)可以返回窗口內(nèi)第N行數(shù)據(jù)。

其中,LAG函數(shù)和LEAD函數(shù)不支持動(dòng)態(tài)的窗口大小,它們以整個(gè)分區(qū)作為分析的窗口。

案例分析

案例使用的示例表

下面的查詢中會(huì)用到一張表,sales_monthly表中存儲(chǔ)了商品銷(xiāo)量信息,product表示產(chǎn)品名稱(chēng),ym表示年月,amount表示銷(xiāo)售金額(元)。

以下是該表中的部分?jǐn)?shù)據(jù):

這個(gè)表的初始化腳本可以在文章底部獲取。

1.環(huán)比分析

環(huán)比增長(zhǎng)指的是本期數(shù)據(jù)與上期數(shù)據(jù)相比的增長(zhǎng),例如,產(chǎn)品2019年6月的銷(xiāo)售額與2019年5月的銷(xiāo)售額相比增加的部分。

以下語(yǔ)句統(tǒng)計(jì)了各種產(chǎn)品每個(gè)月的環(huán)比增長(zhǎng)率:

SELECT s.product AS "產(chǎn)品", s.ym AS "年月", s.amount AS "銷(xiāo)售額",
 ( 
    (s.amount - LAG(s.amount,1) OVER (PARTITION BY product ORDER BY s.ym))/
    LAG(s.amount,1) OVER (PARTITION BY product ORDER BY s.ym)
 ) * 100 AS "環(huán)比增長(zhǎng)率(%)"
FROM sales_monthly s
ORDER BY s.product,s.ym

登錄后復(fù)制

其中,LAG(amount,1)表示獲取上一期的銷(xiāo)售額,PARTITION BY選項(xiàng)表示按照產(chǎn)品分區(qū),ORDER BY選項(xiàng)表示按照月份進(jìn)行排序。

當(dāng)前月份的銷(xiāo)售額amount減去上一期的銷(xiāo)售額,再除以上一期的銷(xiāo)售額,就是環(huán)比增長(zhǎng)率。

該查詢返回的結(jié)果如下:

2018年1月是第一期,因此其環(huán)比增長(zhǎng)率為空。

“桔子”2018年2月的環(huán)比增長(zhǎng)率約為0.2856%((10183-10154)/10154×100),依此類(lèi)推。

2.同比分析

同比增長(zhǎng)指的是本期數(shù)據(jù)與上一年度或歷史同期相比的增長(zhǎng),例如,產(chǎn)品2019年6月的銷(xiāo)售額與2018年6月的銷(xiāo)售額相比增加的部分。

以下語(yǔ)句統(tǒng)計(jì)了各種產(chǎn)品每個(gè)月的同比增長(zhǎng)率:

SELECT s.product AS "產(chǎn)品", s.ym AS "年月", s.amount AS "銷(xiāo)售額",
 ( 
    (s.amount - LAG(s.amount,12) OVER (PARTITION BY product ORDER BY s.ym))/
    LAG(s.amount,12) OVER (PARTITION BY product ORDER BY s.ym)
 ) * 100 AS "同比增長(zhǎng)率(%)"
FROM sales_monthly s
ORDER BY s.product,s.ym

登錄后復(fù)制

其中,LAG(amount,12)表示當(dāng)前月份之前第12期的銷(xiāo)售額,也就是去年同月份的銷(xiāo)售額。

PARTITION BY選項(xiàng)表示按照產(chǎn)品分區(qū),ORDER BY選項(xiàng)表示按照月份進(jìn)行排序。

當(dāng)前月份的銷(xiāo)售額amount減去去年同期的銷(xiāo)售額,再除以去年同期的銷(xiāo)售額,就是同比增長(zhǎng)率。

該查詢返回的結(jié)果如下:

2018年的12期數(shù)據(jù)都沒(méi)有對(duì)應(yīng)的同比增長(zhǎng)率,“桔子”2019年1月的同比增長(zhǎng)率約為9.3067%((11099-10154)/10154×100),依此類(lèi)推。

提示:LEAD函數(shù)與LAG函數(shù)的使用方法類(lèi)似,不過(guò)它的返回結(jié)果是當(dāng)前行之后的第N行數(shù)據(jù)。

3.復(fù)合增長(zhǎng)率

復(fù)合增長(zhǎng)率是第N期的數(shù)據(jù)除以第一期的基準(zhǔn)數(shù)據(jù),然后開(kāi)N-1次方再減去1得到的結(jié)果。

假如2018年的產(chǎn)品銷(xiāo)售額為10000,2019年的產(chǎn)品銷(xiāo)售額為12500,2020年的產(chǎn)品銷(xiāo)售額為15000。那么這兩年的復(fù)合增長(zhǎng)率的計(jì)算方式如下:

以年度為單位計(jì)算的復(fù)合增長(zhǎng)率被稱(chēng)為年均復(fù)合增長(zhǎng)率,以月度為單位計(jì)算的復(fù)合增長(zhǎng)率被稱(chēng)為月均復(fù)合增長(zhǎng)率

以下查詢統(tǒng)計(jì)了自2018年1月以來(lái)不同產(chǎn)品的月均銷(xiāo)售額復(fù)合增長(zhǎng)率:

WITH s (product,ym,amount,first_amount,num) AS (
  SELECT m.product, m.ym, m.amount,
  FIRST_VALUE(m.amount) OVER (PARTITION BY m.product ORDER BY m.ym),
  ROW_NUMBER() OVER (PARTITION BY m.product ORDER BY m.ym)
  FROM sales_monthly m
)
 
SELECT product AS "產(chǎn)品", ym AS "年月",amount AS "銷(xiāo)售額",
       (POWER( amount/first_amount, 1.0/NULLIF(num-1,0)) -1)*100 AS "月均復(fù)合增長(zhǎng)率(%)"
FROM s
ORDER BY product, ym

登錄后復(fù)制

首先定義了一個(gè)通用表表達(dá)式,其中FIRST_VALUE(amount)返回了第一期(201801)的銷(xiāo)售額,ROW_NUMBER函數(shù)返回了每一期的編號(hào)。

主查詢中的POWER函數(shù)用于執(zhí)行開(kāi)方運(yùn)算,NULLIF函數(shù)用于處理第一期數(shù)據(jù)的除零錯(cuò)誤,常量1.0用于避免由整數(shù)除法所導(dǎo)致的精度丟失問(wèn)題。

該查詢返回的結(jié)果如下:

2018年1月是第一期,因此其產(chǎn)品月均銷(xiāo)售額復(fù)合增長(zhǎng)率為空。

“桔子”2018年2月的月均銷(xiāo)售額復(fù)合增長(zhǎng)率等于它的環(huán)比增長(zhǎng)率,2018年3月的月均銷(xiāo)售額復(fù)合增長(zhǎng)率等于0.4471%,依此類(lèi)推。

4.不同產(chǎn)品最高和最低銷(xiāo)售額

以下語(yǔ)句統(tǒng)計(jì)了不同產(chǎn)品最低銷(xiāo)售額、最高銷(xiāo)售額以及第三高銷(xiāo)售額所在的月份:

  SELECT product AS "產(chǎn)品", ym AS "年月",amount AS "銷(xiāo)售額",
  
         FIRST_VALUE(m.ym) OVER (
           PARTITION BY m.product ORDER BY m.amount DESC
           ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
         ) AS "最高銷(xiāo)售額月份",
         
         LAST_VALUE(m.ym) OVER (
           PARTITION BY m.product ORDER BY m.amount DESC
           ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
         ) AS "最低銷(xiāo)售額月份",
         
         NTH_VALUE(m.ym,3) OVER (
           PARTITION BY m.product ORDER BY m.amount DESC
           ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
         ) AS "第三高銷(xiāo)售額月份"
 
  FROM sales_monthly m
  ORDER BY product, ym;

登錄后復(fù)制

三個(gè)窗口函數(shù)的OVER子句相同,PARTITION BY選項(xiàng)表示按照產(chǎn)品進(jìn)行分區(qū),ORDER BY選項(xiàng)表示按照銷(xiāo)售額從高到低排序。

以上三個(gè)函數(shù)的默認(rèn)窗口都是從分區(qū)的第一行到當(dāng)前行,因此我們將窗口擴(kuò)展到了整個(gè)分區(qū)。

該查詢返回的結(jié)果如下:

“桔子”的最高銷(xiāo)售額出現(xiàn)在2019年6月,最低銷(xiāo)售額出現(xiàn)在2018年1月,第三高銷(xiāo)售額出現(xiàn)在2019年4月。

示例表和腳本

-- 創(chuàng)建銷(xiāo)量表sales_monthly
-- product表示產(chǎn)品名稱(chēng),ym表示年月,amount表示銷(xiāo)售金額(元)
CREATE TABLE sales_monthly(product VARCHAR(20), ym VARCHAR(10), amount NUMERIC(10, 2));
 
-- 生成測(cè)試數(shù)據(jù)
INSERT INTO sales_monthly (product,ym,amount) VALUES ('蘋(píng)果','201801',10159.00);
INSERT INTO sales_monthly (product,ym,amount) VALUES ('蘋(píng)果','201802',10211.00);
INSERT INTO sales_monthly (product,ym,amount) VALUES ('蘋(píng)果','201803',10247.00);
INSERT INTO sales_monthly (product,ym,amount) VALUES ('蘋(píng)果','201804',10376.00);
INSERT INTO sales_monthly (product,ym,amount) VALUES ('蘋(píng)果','201805',10400.00);
INSERT INTO sales_monthly (product,ym,amount) VALUES ('蘋(píng)果','201806',10565.00);
INSERT INTO sales_monthly (product,ym,amount) VALUES ('蘋(píng)果','201807',10613.00);
INSERT INTO sales_monthly (product,ym,amount) VALUES ('蘋(píng)果','201808',10696.00);
INSERT INTO sales_monthly (product,ym,amount) VALUES ('蘋(píng)果','201809',10751.00);
INSERT INTO sales_monthly (product,ym,amount) VALUES ('蘋(píng)果','201810',10842.00);
INSERT INTO sales_monthly (product,ym,amount) VALUES ('蘋(píng)果','201811',10900.00);
INSERT INTO sales_monthly (product,ym,amount) VALUES ('蘋(píng)果','201812',10972.00);
INSERT INTO sales_monthly (product,ym,amount) VALUES ('蘋(píng)果','201901',11155.00);
INSERT INTO sales_monthly (product,ym,amount) VALUES ('蘋(píng)果','201902',11202.00);
INSERT INTO sales_monthly (product,ym,amount) VALUES ('蘋(píng)果','201903',11260.00);
INSERT INTO sales_monthly (product,ym,amount) VALUES ('蘋(píng)果','201904',11341.00);
INSERT INTO sales_monthly (product,ym,amount) VALUES ('蘋(píng)果','201905',11459.00);
INSERT INTO sales_monthly (product,ym,amount) VALUES ('蘋(píng)果','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);

登錄后復(fù)制

推薦學(xué)習(xí):《SQL教程》

以上就是SQL窗口函數(shù)詳解之排名窗口函數(shù)的使用的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注風(fēng)君子博客其它相關(guān)文章!

總結(jié)

以上是生活随笔為你收集整理的SQL窗口函数详解之排名窗口函数的使用(sql窗口函数)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产成人精品综合久久久久99 | 潘金莲黄色一级片 | 中文字幕第二区 | 大胸美女被爆操 | 在线观看黄色av网站 | 成年人看的黄色片 | 涩涩视频网 | 公肉吊粗大爽色翁浪妇视频 | 天天人人综合 | 久久久久久久综合色一本 | 欧美精品久久久久久久免费 | 邻居少妇张开腿让我爽了在线观看 | 香蕉视频黄色在线观看 | bt天堂av| 午夜av不卡| 狼人伊人干 | 视频福利在线 | 国产乡下妇女三片 | 玩弄白嫩少妇xxxxx性 | 亚洲区国产区 | 欧美一级爱爱视频 | 欧美特级毛片 | 久久黄色影视 | 国产美女三级无套内谢 | 色av导航 | 高清亚洲| 亚洲综合激情五月久久 | 女教师痴汉调教hd中字 | 久久久噜噜噜久久 | 一级黄色性视频 | 少妇特黄一区二区三区 | 女同性恋一区二区三区 | 日韩人成 | 国产精品va无码一区二区 | 91福利在线观看视频 | 波多野结衣mp4 | 影音先锋在线看 | 成人免费毛片男人用品 | 日少妇的逼 | 国产黄色91 | 欧美 日韩 国产 成人 在线 | 日本人添下边视频免费 | 日本亚洲色大成网站www久久 | 久久国产精品久久久久 | 国产91精| 国产va在线 | 夫妻自拍偷拍 | 美女一区 | 欧美精品一区二区三区在线播放 | 日本在线观看中文字幕 | av影片在线观看 | av不卡在线观看 | 国产乱淫精品一区二区三区毛片 | 欧美黄一级 | 国产精选毛片 | 九一成人网 | 国产日韩综合 | 成人亚洲精品777777ww | 色哟哟视频在线观看 | 免费无码国产v片在线观看 三级全黄做爰在线观看 | 亚洲av成人一区二区国产精品 | 国产美女自慰在线观看 | 国产成人av一区 | av电影在线播放 | 三级黄在线观看 | 涩色网站 | 国产香蕉在线视频 | 久久久久久色 | 一区二区三区不卡视频 | 国产在线麻豆精品观看 | 国产成人亚洲综合 | 99视频只有精品 | av成人在线电影 | 欧美三级a | 一区二区三区中文视频 | 黑人巨大精品欧美一区二区免费 | 国产123| 国模少妇一区二区三区 | 欧美激情在线播放 | 欧美激情在线免费 | 亚洲第一区av | 国产999在线观看 | 91中出| 色一区二区三区 | 亚洲国产精品久久AV | 欧美日韩免费做爰视频 | 欧美精品18| 黄网站免费在线观看 | ktv做爰视频一区二区 | 激情av网站 | 免费大片在线观看www | 日韩欧美精品久久 | 亚洲特黄特色 | 欧美亚洲网站 | 午夜精品久久久久久久久久久久久蜜桃 | 黄色综合 | 亚洲网在线 | 在线观看第一页 | 女生被男生c |