激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

香港云服务器
服務器之家 - 數據庫 - Mysql - MySQL數據庫基礎篇SQL窗口函數示例解析教程

MySQL數據庫基礎篇SQL窗口函數示例解析教程

2021-11-24 17:38數據分析與統計學之美 Mysql

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

本文簡介

前段時間,黃同學寫了一篇《MySQL窗口實戰》文章(文章如下),但是里面大多數是以實戰練習為主,沒有做詳細的解釋。

傳送門:MySQL實戰窗口函數SQL分析班級學生考試成績及生活消費

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

下面是月牙的玩笑簡介,附帶大圖一張哦。

正文介紹

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

我們在力扣刷題的時候,不難發現,比較困難的題目經常會涉及到窗口函數的應用,可以說窗口函數,是檢驗我們的SQL水平是否到達熟練水平的一個標尺。

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

窗口是描述over()括號內劃定的內容,這個內容就是窗口函數的作用域,即操作的數據都在over()的范圍內。

對于窗口函數,我個人的理解是給源數據開一扇可以滑動的窗口,在窗口移動的時候可以對其中的數據進行附加計算,如移動平均、分組排序等,窗口可以是一行多行甚至是所有行。

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

靈魂畫手上線,用Excel簡單做了個簡易版的窗口函數的演示圖:

MySQL數據庫基礎篇SQL窗口函數示例解析教程

聚合函數 + over()

基本語法:

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

含義: 表示用partition by分組后針對每個組別進行求和或者求均值。

?
1
2
3
4
5
--包括本行以內和前3行:rows between 6 preceding and current row
--包括本行以內和后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行數據):rows between 3 preceding and 1 following

還有一些其它的聚合函數,例如max、min、count,它們的語法結構都類似。

排序函數 + over()

row_number()、rank()、dense_rank()這三個函數,都是對select查詢到的結果進行排序,我們來看看這三者的區別。

row_number(): 為不重復的連續排序,從1開始,為查詢到的數據依次生成不重復的序號進行排序

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

rank(): 為跳躍排序,結果相同的兩個數據并列,為下一個數據空出所占的名次,即相同排名會占位

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

dense_rank(): 為有重復的連續排序,結果相同的兩個數據并列,不為下一個數據空出所占的名次,即相同排名不占位

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

我們用一張圖來表示這三者間的關系:

MySQL數據庫基礎篇SQL窗口函數示例解析教程

ntile()函數 + over()

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

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

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

偏移函數 + over()

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

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

str表示字段名,n表示前/后n行數據,默認值為1,default表示如果取值范圍已經超過整個表的返回值,可以不填,不填默認返回N/A。

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

以上就是MySQL數據庫基礎篇窗口函數示例解析教程的詳細內容,更多關于MySQL窗口函數基礎的資料請關注服務器之家其它相關文章!

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

延伸 · 閱讀

精彩推薦
519
主站蜘蛛池模板: 一本视频在线观看 | 欧美一级特黄特色大片免费 | 久久久中 | 手机黄网www8xcn | 在线观看国产www | 99re热视频这里只精品 | 欧美成人a | 成人午夜免费国产 | 亚洲精中文字幕二区三区 | 国产91免费看 | 最新精品在线 | 一级毛片在线免费播放 | 久久久久久免费 | 国产伦精品一区二区三区在线 | 国产精品手机在线亚洲 | 国产99视频精品免视看9 | 亚洲午夜精选 | 精品国产一二区 | 一级看片免费视频 | 天堂精品久久 | 97se亚洲综合在线韩国专区福利 | 亚欧在线免费观看 | 国产羞羞视频在线观看 | 国产精品久久久久久久久久尿 | 国产合集91合集久久日 | 国产高潮好爽受不了了夜色 | 毛片大全免费看 | 欧美人禽| 亚洲最黄视频 | 精品国产乱码久久久久久丨区2区 | 亚洲一级网站 | 色七七亚洲| 成人在线免费视频观看 | 蜜桃视频观看麻豆 | 成人黄视频在线观看 | 性生活视频一级 | 国产在线精品91 | 国产一级一区二区三区 | 中文字幕 日本 | 亚洲第一视频在线 | 国产一级做a爱片在线看免 日日草夜夜 |