一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數(shù)據(jù)庫(kù)技術(shù)|

服務(wù)器之家 - 數(shù)據(jù)庫(kù) - Mysql - MySQL數(shù)據(jù)庫(kù)基礎(chǔ)篇SQL窗口函數(shù)示例解析教程

MySQL數(shù)據(jù)庫(kù)基礎(chǔ)篇SQL窗口函數(shù)示例解析教程

2021-11-24 17:38數(shù)據(jù)分析與統(tǒng)計(jì)學(xué)之美 Mysql

這篇文章主要為大家介紹了MySQL數(shù)據(jù)庫(kù)基礎(chǔ)篇之窗口函數(shù)示例解析教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步

本文簡(jiǎn)介

前段時(shí)間,黃同學(xué)寫了一篇《MySQL窗口實(shí)戰(zhàn)》文章(文章如下),但是里面大多數(shù)是以實(shí)戰(zhàn)練習(xí)為主,沒(méi)有做詳細(xì)的解釋。

傳送門:MySQL實(shí)戰(zhàn)窗口函數(shù)SQL分析班級(jí)學(xué)生考試成績(jī)及生活消費(fèi)

于是,私信了月牙美女,看看她能否寫一篇《窗口函數(shù)基礎(chǔ)篇》,正好和之前那篇文章配套。這不,很快她就寫好了,今天就給大家做一個(gè)分享,旨在和大家交流學(xué)習(xí)哦!

下面是月牙的玩笑簡(jiǎn)介,附帶大圖一張哦。

正文介紹

窗口函數(shù),也被稱為 “開窗函數(shù)”,MySQL8.0以后,就可以使用這些函數(shù)了。

我們?cè)诹鬯㈩}的時(shí)候,不難發(fā)現(xiàn),比較困難的題目經(jīng)常會(huì)涉及到窗口函數(shù)的應(yīng)用,可以說(shuō)窗口函數(shù),是檢驗(yàn)我們的SQL水平是否到達(dá)熟練水平的一個(gè)標(biāo)尺。

窗口函數(shù)的格式為: 聚合函數(shù)+over()

窗口是描述over()括號(hào)內(nèi)劃定的內(nèi)容,這個(gè)內(nèi)容就是窗口函數(shù)的作用域,即操作的數(shù)據(jù)都在over()的范圍內(nèi)。

對(duì)于窗口函數(shù),我個(gè)人的理解是給源數(shù)據(jù)開一扇可以滑動(dòng)的窗口,在窗口移動(dòng)的時(shí)候可以對(duì)其中的數(shù)據(jù)進(jìn)行附加計(jì)算,如移動(dòng)平均、分組排序等,窗口可以是一行多行甚至是所有行。

窗口函數(shù),還可以對(duì)多組數(shù)據(jù)進(jìn)行同步排序、聚合等運(yùn)算,針對(duì)group by子句或where處理后的結(jié)果進(jìn)行操作,只能寫入select子句里。

靈魂畫手上線,用Excel簡(jiǎn)單做了個(gè)簡(jiǎn)易版的窗口函數(shù)的演示圖:

MySQL數(shù)據(jù)庫(kù)基礎(chǔ)篇SQL窗口函數(shù)示例解析教程

聚合函數(shù) + over()

基本語(yǔ)法:

sum/avg(被加工的字段名) over(partition by 分組的字段名 order by 排序的字段名 rows between … and …)

含義: 表示用partition by分組后針對(duì)每個(gè)組別進(jìn)行求和或者求均值。

?
1
2
3
4
5
--包括本行以內(nèi)和前3行:rows between 6 preceding and current row
--包括本行以內(nèi)和后3行:rows between current row and 3 following
--包括本行和之前所有的行:rows between unbounded preceding and current row
--包括本行和之后所有的行:rows between current row and unbounded following
--從前3行到下1行(總共包含5行數(shù)據(jù)):rows between 3 preceding and 1 following

還有一些其它的聚合函數(shù),例如max、min、count,它們的語(yǔ)法結(jié)構(gòu)都類似。

排序函數(shù) + over()

row_number()、rank()、dense_rank()這三個(gè)函數(shù),都是對(duì)select查詢到的結(jié)果進(jìn)行排序,我們來(lái)看看這三者的區(qū)別。

row_number(): 為不重復(fù)的連續(xù)排序,從1開始,為查詢到的數(shù)據(jù)依次生成不重復(fù)的序號(hào)進(jìn)行排序

基本語(yǔ)法——row_number() over(order by 需要排序的字段asc/desc);

rank(): 為跳躍排序,結(jié)果相同的兩個(gè)數(shù)據(jù)并列,為下一個(gè)數(shù)據(jù)空出所占的名次,即相同排名會(huì)占位

基本語(yǔ)法——rank() over(order by 需要排序的字段 asc/desc);

dense_rank(): 為有重復(fù)的連續(xù)排序,結(jié)果相同的兩個(gè)數(shù)據(jù)并列,不為下一個(gè)數(shù)據(jù)空出所占的名次,即相同排名不占位

基本語(yǔ)法——dense_rank() over(order by 需要排序的字段 asc/desc);

我們用一張圖來(lái)表示這三者間的關(guān)系:

MySQL數(shù)據(jù)庫(kù)基礎(chǔ)篇SQL窗口函數(shù)示例解析教程

ntile()函數(shù) + over()

基本語(yǔ)法: ntile(n) over(partition by…order by…)其中n表示被切分的段數(shù)。

ntile(n)用于將分組數(shù)據(jù)平均切分成n塊,如果切分的每組數(shù)量不均等,則第一組分得的數(shù)據(jù)更多。

ntile()函數(shù)通常用于比如求年級(jí)前10%成績(jī)的學(xué)生,則n取值為10,用where篩選出第一組的數(shù)據(jù)。

偏移函數(shù) + over()

基本語(yǔ)法1:前N行:lead(str, n, default) over(partition by …order by …)

基本語(yǔ)法2:后N行:lag(str, n, default) over(partition by …order by …)

str表示字段名,n表示前/后n行數(shù)據(jù),默認(rèn)值為1,default表示如果取值范圍已經(jīng)超過(guò)整個(gè)表的返回值,可以不填,不填默認(rèn)返回N/A。

偏移函數(shù),用于取出同一字段的前N行數(shù)據(jù)或后N行數(shù)據(jù),作為單獨(dú)的列,這里需要特別注意一下的是,lead代表前N行,lag代表后N行。

以上就是MySQL數(shù)據(jù)庫(kù)基礎(chǔ)篇窗口函數(shù)示例解析教程的詳細(xì)內(nèi)容,更多關(guān)于MySQL窗口函數(shù)基礎(chǔ)的資料請(qǐng)關(guān)注服務(wù)器之家其它相關(guān)文章!

原文鏈接:https://huang-tong-xue.blog.csdn.net/article/details/116201478

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产精品久久免费 | 亚洲午夜小视频 | 国产99久久精品 | anal22日本人视频 | 成人涩涩屋福利视频 | 娇小8一12xxxx第一次 | 精品欧美一区二区精品久久 | 欧美久久影院 | 无码观看AAAAAAAA片 | 污污的动态图合集 | 亚洲AV无码国产精品色午夜情 | sss在线观看免费视频 | 亚洲欧美精品久久 | 国产精品久久毛片完整版 | 天天狠天天天天透在线 | 国产成人福利色视频 | 狠狠色狠狠色综合曰曰 | 精品国产一区二区三区久久久蜜臀 | 亚洲欧美日韩国产精品影院 | 精品欧美一区二区在线观看欧美熟 | 无码AV精品一区二区三区 | 亚洲高清国产品国语在线观看 | 香蕉国产精品偷在线播放 | 精品国产精品人妻久久无码五月天 | 亚洲福利一区二区精品秒拍 | 国产精品调教 | 国产精品久久亚洲一区二区 | xxxxxx性受| 亚州日韩精品AV片无码中文 | 九九精品视频在线观看 | 亚洲sss综合天堂久久久 | 国产日韩欧美一区 | 国产精品自拍一区 | 成年人免费观看的视频 | 美女天天操 | 新新电影理论中文字幕 | 国产欧美综合一区二区 | 日本精品久久久久中文字幕 1 | 青苹果乐园影院免费观看完整版 | 天天色视频| 成人久久久 |