數(shù)據(jù)分析-SQL-開窗函數(shù)

碎語

  • 學(xué)習(xí)的正態(tài)曲線:入門容易宋梧,精通難
  • 積累的正態(tài)曲線:先越讀越多刨疼,后越讀越少

什么是開窗函數(shù)

很多場景比如排序虐译,累計求和等瘪板,如果沒有開窗函數(shù),那么就要使用很復(fù)雜的子查詢或是存儲過程才能做到漆诽。為了解決這些問題侮攀,就有了現(xiàn)在的開窗函數(shù),MySQL是從8.0版本之后才有了開窗函數(shù)厢拭,如果要使用兰英,那么必須下載MySQL8.0以上的版本
開窗函數(shù)主要是為了給行定義一個窗口,可以理解就是一個分組,但是和group by 的區(qū)別在于它不是返回一個聚合值供鸠,而是每一行都能返回一個值畦贸。舉個例子,咱們要求每個月銷量和當年總銷量以及每個月的銷量占比楞捂,這時候用sum() 和開窗就很容易了
數(shù)據(jù)參考數(shù)據(jù)分析師經(jīng)常遇到的SQL場景解析

select
    sal_year,
    sal_month,
    sum_sale,#銷量
    sum(sum_sale) over(partition by sal_year) as cumu_sal,##年總銷量
    sum_sale/(sum(sum_sale) over(partition by sal_year)) as ratio  ##每個月銷量占全年銷量的占比
from 
    (select
        year(date(order_date) )as sal_year,
        month(date(order_Date) )as sal_month,
        sum(sales) as sum_sale
    from 
        chaoshi.order
    group by 
        year(date(order_date) ),
        month(date(order_Date) )
    )a
order by
    sal_year,
    sal_month;
    
結(jié)果預(yù)覽

開窗結(jié)構(gòu)

函數(shù)+開窗函數(shù):row_number() over()

 row_number() over(partition by xx  order by yy  rows between zz and aa)
  • partition by:分組薄坏,顧名思義就是以什么字段進行分組,形式跟group by 一樣
  • order by : 排序寨闹,對分完組后的數(shù)據(jù)胶坠,進行組內(nèi)的排序
  • rows between :窗口,計算的窗口繁堡,between后可以跟如下的內(nèi)容:
    • unbounded preceding:第一行
    • unbounded following:最后一行
    • current row:當前行
    • N preceding:前N行
    • N following:后N行
    • 一般省略了rows的時候默認都是從開窗后的第一行到當前行沈善,后面的具體例子會講解
  • row_number() 就是一個函數(shù),開窗一般都是與排序和聚合函數(shù)一起使用

函數(shù)

排名開窗函數(shù)

  • row_number ():排序之后不管有沒有重復(fù)值都是一直往上再加序號
  • dense_rank():排序之后遇到重復(fù)值會生成一樣的序號帖蔓,但是接下來的序號連續(xù)
  • rank():排序之后遇到重復(fù)值會生成一樣的序號矮瘟,接下來的序號不連續(xù),具體如下栗子

栗子

with test as (##創(chuàng)建了一個臨時表
select
    1 as num 
from 
    dual
union all

select
    2 as num 
from 
    dual

union all
select
    2 as num 
from 
    dual

union all
select
    3 as num 
from 
    dual
union all

select
    4 as num 
from 
    dual

)

select 
    num ,
    row_number() over(order by num ) as row_number1,
    rank() over(order by num) as rank1,
    dense_rank() over(order by num) as dense_rank1
from 
    test ##上面的臨時表test

結(jié)果

不同排序的結(jié)果

聚合開窗函數(shù)

可以和很多聚合函數(shù)一起使用塑娇,如:sum()/count()/min()/max()

結(jié)束語

如果我不能讓您看懂澈侠,那是我的問題,如果有疑問可以關(guān)注我埋酬,然后私聊我哨啃,我會盡最大的努力幫助你。如果覺得對你有幫助写妥,請幫忙點贊/關(guān)注拳球,謝謝!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末珍特,一起剝皮案震驚了整個濱河市祝峻,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖莱找,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件酬姆,死亡現(xiàn)場離奇詭異,居然都是意外死亡奥溺,警方通過查閱死者的電腦和手機辞色,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來浮定,“玉大人相满,你說我怎么就攤上這事¤胱洌” “怎么了立美?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長闸盔。 經(jīng)常有香客問我悯辙,道長,這世上最難降的妖魔是什么迎吵? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮击费,結(jié)果婚禮上拢蛋,老公的妹妹穿的比我還像新娘。我一直安慰自己蔫巩,他們只是感情好谆棱,可當我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著圆仔,像睡著了一般垃瞧。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上坪郭,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天个从,我揣著相機與錄音,去河邊找鬼歪沃。 笑死嗦锐,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的沪曙。 我是一名探鬼主播奕污,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼液走!你這毒婦竟也來了碳默?” 一聲冷哼從身側(cè)響起贾陷,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎嘱根,沒想到半個月后昵宇,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡儿子,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了砸喻。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片柔逼。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖割岛,靈堂內(nèi)的尸體忽然破棺而出愉适,到底是詐尸還是另有隱情,我是刑警寧澤癣漆,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布维咸,位于F島的核電站,受9級特大地震影響惠爽,放射性物質(zhì)發(fā)生泄漏癌蓖。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一婚肆、第九天 我趴在偏房一處隱蔽的房頂上張望租副。 院中可真熱鬧,春花似錦较性、人聲如沸用僧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽责循。三九已至,卻和暖如春攀操,著一層夾襖步出監(jiān)牢的瞬間院仿,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工崔赌, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留意蛀,地道東北人。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓健芭,卻偏偏與公主長得像县钥,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子慈迈,可洞房花燭夜當晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容

  • 一 . 開窗函數(shù) 分組函數(shù) 開窗函數(shù) 分組與開窗的區(qū)別分組函數(shù)每組只返回一行若贮,而開窗函數(shù)每組返回多行省有。如下: 分組...
    文字抒意閱讀 3,949評論 0 4
  • over在聚合函數(shù)中的使用:一般格式:聚合函數(shù)名(列) over(選項)over必須與聚合函數(shù)或排序函數(shù)一起使用...
    酸甜檸檬26閱讀 5,409評論 0 5
  • 談到 SQL 的開窗函數(shù),要說到HIVE了谴麦,因為這個是HIVE支持的特性蠢沿,但是在Spark SQL中支持HIVE...
    麥穗一足閱讀 3,262評論 0 1
  • 1. 介紹 普通聚合函數(shù)聚合的行集是組,開窗函數(shù)聚合的行集是窗口匾效。因此舷蟀,普通聚合函數(shù)每組(Group by)只有一...
    Yobhel閱讀 561評論 0 2
  • 1. 介紹 普通聚合函數(shù)聚合的行集是組,開窗函數(shù)聚合的行集是窗口面哼。因此野宜,普通聚合函數(shù)每組(Group by)只有一...
    幸運豬x閱讀 8,160評論 0 4