国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

開窗函數(shù)的使用詳解(窗口范圍ROWS與RANGE圖文詳解)

這篇具有很好參考價值的文章主要介紹了開窗函數(shù)的使用詳解(窗口范圍ROWS與RANGE圖文詳解)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

一、函數(shù)寫法

函數(shù)名(參數(shù)) OVER (PARTITION BY子句 ORDER BY子句 ROWS/RANGE子句)

由三部分組成: 函數(shù)名:如sum、max、min、count、avg等聚合函數(shù)以及l(fā)ead、lag行比較函數(shù)等; over:
關(guān)鍵字,表示前面的函數(shù)是分析函數(shù),不是普通的集合函數(shù); 分組子句:over關(guān)鍵字后面掛號內(nèi)的內(nèi)容;

分析子句又由下面三部分組成: PARTITION BY :分組子句,表示分析函數(shù)的計算范圍,不同的組互不相干; ORDER BY:
排序子句,表示分組后,組內(nèi)的排序方式; ROWS/RANGE:窗口子句,是在分組(PARTITION
BY)后,組內(nèi)的子分組(也稱窗口),此時分析函數(shù)的計算范圍窗口,而不是PARTITON。窗口有兩種,ROWS和RANGE;

二、開窗的窗口范圍ROWS與RANGE

1.范圍限定用法 CURRENT ROW: 當(dāng)前行
UNBOUNDED:不受控制的,無限的
UNBOUNDED PRECEDING: 區(qū)間的第一行
UNBOUNDED FOLLOWING:區(qū)間的最后一行
UNBOUNDED PRECEDING AND UNBOUNED FOLLOWING:針對當(dāng)前所有記錄的前一條、后一條記錄,分組中的所有記錄
PRECEDING:在…之前, N PRECEDING:當(dāng)前行之前的N行,可以是數(shù)字用于RANGE數(shù)據(jù)范圍限定,也可以是一個能計算出數(shù)字的表達(dá)式
FOLLOWING:在…之后,N FOLLOWING:當(dāng)前行之后的N行,可以是數(shù)字用于RANGE數(shù)據(jù)范圍限定,也可以是一個能計算出數(shù)字的表達(dá)式 ROWS BETWEEN
UNBOUNDED PRECEDING AND CURRENT ROW :指第一行至當(dāng)前行的數(shù)據(jù)
ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING :指當(dāng)前行到最后一行的匯總
ROWS BETWEEN 1 PRECEDING AND CURRENT ROW :指當(dāng)前行的上一行(ROWNUM-1)到當(dāng)前行的數(shù)據(jù)
ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING :指當(dāng)前行的上一行(ROWNUM-1)到當(dāng)前行的下一行(ROWNUM+1)的數(shù)據(jù)
RANGE BETWEEN CURRENT ROW AND 350 FOLLOWING:指當(dāng)前行到當(dāng)前行數(shù)據(jù)+350的范圍內(nèi)的數(shù)據(jù)
RANGE BETWEEN 5 PRECEDING AND 5 FOLLOWING:指當(dāng)前行數(shù)據(jù)幅度減5加5后的范圍內(nèi)的數(shù)據(jù)

三、練習(xí):


```bash
DROP TABLE IF EXISTS `test`;
CREATE TABLE `test`  (
  `video_id` int(0) NOT NULL COMMENT '視頻ID',
  `dt` date NULL DEFAULT NULL,
  `if_follow` tinyint(0) NULL DEFAULT NULL COMMENT '是否關(guān)注'
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
 
-- ----------------------------
-- Records of test
-- ----------------------------
INSERT INTO `test` VALUES (2001, '2021-09-24', 1);
INSERT INTO `test` VALUES (2001, '2021-10-03', 9);
INSERT INTO `test` VALUES (2001, '2021-10-02', 2);
INSERT INTO `test` VALUES (2001, '2021-10-01', 6);
INSERT INTO `test` VALUES (2002, '2021-09-25', 1);
INSERT INTO `test` VALUES (2002, '2021-09-25', 1);
INSERT INTO `test` VALUES (2002, '2021-09-26', 6);
INSERT INTO `test` VALUES (2002, '2021-09-27', 1);
INSERT INTO `test` VALUES (2002, '2021-09-28', 1);
INSERT INTO `test` VALUES (2002, '2021-09-29', 8);
INSERT INTO `test` VALUES (2002, '2021-09-30', 7);
INSERT INTO `test` VALUES (2002, '2021-10-01', 1);
INSERT INTO `test` VALUES (2002, '2021-10-02', 9);
INSERT INTO `test` VALUES (2002, '2021-10-03', 1);

range是對order by 的值進(jìn)行判斷范圍計算的,根據(jù)實(shí)際的值和當(dāng)前的值進(jìn)行判斷取定數(shù)據(jù)范圍的。
#preceding 在…之前
#following 在…之后

select dt,video_id,if_follow, sum(if_follow) over(partition by video_id order by if_follow range between 1 preceding and 1 following) as num from test ;

開窗函數(shù)的使用詳解(窗口范圍ROWS與RANGE圖文詳解)

#current row 當(dāng)前行

select video_id,dt,if_follow, sum(if_follow) over(partition by video_id order by if_follow range BETWEEN  CURRENT ROW and  3 following) as num from test ;

開窗函數(shù)的使用詳解(窗口范圍ROWS與RANGE圖文詳解)

#unbounded preceding 區(qū)間的第一行

select video_id,dt,if_follow, sum(if_follow) over(partition by video_id order by if_follow range BETWEEN  unbounded preceding and  3 following) as num from test ;

開窗函數(shù)的使用詳解(窗口范圍ROWS與RANGE圖文詳解)
#unbounded following 區(qū)間的最后一行

select video_id,dt,if_follow, sum(if_follow) over(partition by video_id order by if_follow range BETWEEN  current row and  unbounded following) as num from test ;

開窗函數(shù)的使用詳解(窗口范圍ROWS與RANGE圖文詳解)
#unbounded preceding and unbounded following 最后一行的值和第一行的值

select video_id,dt,if_follow, sum(if_follow) over(partition by video_id order by if_follow range BETWEEN  unbounded preceding and  unbounded following) as num from test ;

開窗函數(shù)的使用詳解(窗口范圍ROWS與RANGE圖文詳解)

row是對order by 的值進(jìn)行判斷范圍計算的,根據(jù)實(shí)際的值和當(dāng)前的值進(jìn)行判斷取定數(shù)據(jù)范圍的
#preceding 在…之前
#following 在…之后

select dt,video_id,if_follow, sum(if_follow) over(partition by video_id order by if_follow rows between 1 preceding and 1 following) as num from test ;

開窗函數(shù)的使用詳解(窗口范圍ROWS與RANGE圖文詳解)

#current row 當(dāng)前行

select video_id,dt,if_follow, sum(if_follow) over(partition by video_id order by if_follow rows BETWEEN  CURRENT ROW and  3 following) as num from test ;

開窗函數(shù)的使用詳解(窗口范圍ROWS與RANGE圖文詳解)
#unbounded preceding 區(qū)間的第一行

select video_id,dt,if_follow, sum(if_follow) over(partition by video_id order by if_follow rows BETWEEN  unbounded preceding and  3 following) as num from test ;

開窗函數(shù)的使用詳解(窗口范圍ROWS與RANGE圖文詳解)
#unbounded following 區(qū)間的最后一行

select video_id,dt,if_follow, sum(if_follow) over(partition by video_id order by if_follow rows BETWEEN  current row and  unbounded following) as num from test ;

開窗函數(shù)的使用詳解(窗口范圍ROWS與RANGE圖文詳解)
#unbounded preceding and unbounded following 最后一行的值和第一行的值

select video_id,dt,if_follow, sum(if_follow) over(partition by video_id order by if_follow rows BETWEEN  unbounded preceding and  unbounded following) as num from test ;

開窗函數(shù)的使用詳解(窗口范圍ROWS與RANGE圖文詳解)文章來源地址http://www.zghlxwxcb.cn/news/detail-439742.html

到了這里,關(guān)于開窗函數(shù)的使用詳解(窗口范圍ROWS與RANGE圖文詳解)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • SQL - 開窗(窗口)函數(shù)

    SQL - 開窗(窗口)函數(shù)

    開窗函數(shù)對一組值進(jìn)行操作,它不像普通聚合函數(shù)那樣需要使用GROUP BY子句對數(shù)據(jù)進(jìn)行分組,能夠在同一行中同時返回基礎(chǔ)行的列和聚合列 開窗函數(shù)的語法形式為:函數(shù) + over(partition by 分組用列 order by 排序用列),表示對數(shù)據(jù)集按照分組用列進(jìn)行分區(qū),并且并且對每個分區(qū)按

    2024年02月12日
    瀏覽(21)
  • 【SQL】MySQL中的窗口函數(shù)(開窗函數(shù))

    窗口函數(shù)是 MYSQL8.0 新增的 聚合函數(shù): 多行變一行,常見的sum,count,max,min 窗口函數(shù): 行數(shù)不變,常見的row_number,rank 語法格式: 窗口函數(shù)(表達(dá)式) over (partition by … order by … frame_clause) partition by是分區(qū),類似于group by,如去掉相當(dāng)于對所有數(shù)據(jù)進(jìn)行計算 order by排序 frame_c

    2024年02月07日
    瀏覽(21)
  • MySQL---控制流函數(shù)、窗口函數(shù)(序號函數(shù)、開窗聚合函數(shù)、分布函數(shù)、前后函數(shù)、頭尾函數(shù)、其他函數(shù))

    MySQL---控制流函數(shù)、窗口函數(shù)(序號函數(shù)、開窗聚合函數(shù)、分布函數(shù)、前后函數(shù)、頭尾函數(shù)、其他函數(shù))

    格式 解釋 案例 IF(expr,v1,v2) 如果表達(dá)式 expr 成立,返回結(jié)果 v1 ;否則,返回結(jié)果 v2 。 SELECT IF(1 0,\\\' 正確 \\\',\\\' 錯誤 \\\')??? - 正確 IFNULL(v1,v2) 如果 v1 的值不為 NULL ,則返回 v1 ,否則返回 v2 。 SELECT IFNULL(null,\\\'Hello Word\\\') -Hello Word ISNULL(expression) 判斷表達(dá)式是否為 NULL SELECT ISNULL(NUL

    2024年02月04日
    瀏覽(22)
  • 【大數(shù)據(jù)之Hive】十六、Hive-HQL函數(shù)之窗口函數(shù)(開窗函數(shù))

    【大數(shù)據(jù)之Hive】十六、Hive-HQL函數(shù)之窗口函數(shù)(開窗函數(shù))

    ??先定義了窗口的大?。ò葱衼硭悖?,然后對窗口內(nèi)的行的數(shù)據(jù)進(jìn)行計算,再將計算結(jié)果返回給改行。 ??窗口函數(shù)包括窗口和函數(shù)兩部分,窗口用于定義計算范圍,函數(shù)用于定義計算邏輯,窗口函數(shù)只會在原來的表上增加一列結(jié)果列,不改變原來的數(shù)據(jù)。 函數(shù): ??絕

    2024年02月11日
    瀏覽(14)
  • ES系列:range范圍查詢使用舉例

    目錄 數(shù)據(jù)范圍 時間范圍 完整日期方式 字母日期方式 range過濾允許我們按照指定范圍查找一批數(shù)據(jù)

    2024年02月11日
    瀏覽(16)
  • 【大數(shù)據(jù)技術(shù)】hive 窗口函數(shù)sum range between的詳細(xì)介紹

    【大數(shù)據(jù)技術(shù)】hive 窗口函數(shù)sum range between的詳細(xì)介紹

    【大數(shù)據(jù)技術(shù)】hive 窗口函數(shù)sum range between的詳細(xì)介紹 數(shù)據(jù)準(zhǔn)備 建表 插入數(shù)據(jù) 查看數(shù)據(jù) 對比兩段sql的不同之處 及其運(yùn)行結(jié)果 結(jié)果如下: 第一段 第二段 重點(diǎn)注意: 第一段和第二段sql的rows between與range between的不同 第一段與第二段sql的order by字段有不同 第二段sql最后使用了

    2024年02月13日
    瀏覽(19)
  • python中的range函數(shù)|python中的range函數(shù)|range()函數(shù)詳解|Python中range(len())的用法

    range() 是 Python 內(nèi)置的一個函數(shù),用于生成一個整數(shù)序列。具體來說,它的定義如下: start、stop、step 分別表示序列的起始值、終止值和步長。start 和 step 是可選參數(shù),如果不指定則默認(rèn)為 0 和 1。 當(dāng)只傳入一個參數(shù)時,表示生成從 0 開始、小于該參數(shù)的整數(shù)序列。例如: 這

    2024年02月07日
    瀏覽(23)
  • hivesql開窗函數(shù)row number() over (partition by )詳解

    ROW_NUMBER() OVER (PARTITION BY ) 是一種窗口函數(shù),用于在每個分區(qū)內(nèi)對行進(jìn)行編號。它可以用于分析和報表等場景,可以幫助我們對數(shù)據(jù)進(jìn)行分組排序,獲取排名信息。 具體來說,ROW_NUMBER() 是一種分析函數(shù),它可以根據(jù) ORDER BY 子句中指定的列對行進(jìn)行排序,并為每個分區(qū)內(nèi)的行分

    2024年02月05日
    瀏覽(21)
  • hive窗口分析函數(shù)使用詳解系列二之分組排序窗口函數(shù)

    我們討論面試中各大廠的SQL算法面試題,往往核心考點(diǎn)就在于窗口函數(shù),所以掌握好了窗口函數(shù),面對SQL算法面試往往事半功倍。 已更新第一類聚合函數(shù)類,點(diǎn)擊這里閱讀 hive窗口函數(shù)聚合函數(shù)類 本節(jié)介紹Hive聚合函數(shù)中的第二類聚合函數(shù):分組排序窗口函數(shù)。 這些函數(shù)的用

    2024年04月13日
    瀏覽(18)
  • SQL窗口分析函數(shù)使用詳解系列三之偏移量類窗口函數(shù)

    本文以HiveSQL語法進(jìn)行代碼演示。 對于其他數(shù)據(jù)庫來說同樣也適用,比如SparkSQL,F(xiàn)linkSQL以及Mysql8,Oracle,SqlServer等傳統(tǒng)的關(guān)系型數(shù)據(jù)庫。 已更新第一類聚合函數(shù)類,點(diǎn)擊這里閱讀 ①SQL窗口函數(shù)系列一之聚合函數(shù)類 ②SQL窗口函數(shù)系列二之分組排序窗口函數(shù) 本節(jié)介紹Hive窗口分

    2024年04月26日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包