MySQL的開窗函數(shù)

是什么?

開窗函數(shù)別名分析函數(shù),MySQL8.0及后續(xù)版本有這個函數(shù)。

分兩類:一類是聚合開窗函數(shù),一類是排序開窗函數(shù)。

與聚合函數(shù)區(qū)別:聚合函數(shù)作用一組值,返回單一值;開窗函數(shù)作用一組值,返回多個值

使用場景:有時候一組數(shù)據(jù)只返回一組值不能滿足需求,如我們想知道各個地區(qū)的前幾名、各個班或各個學(xué)科的前幾名。這時候需要每一組返回多個值,可用開窗函數(shù)解決這類問題。

怎么用?

語法:函數(shù)名(列名)?OVER(partition by 列名 order by列名)?。

開窗函數(shù):row_number()、rank()、dense_rank()

row_number():行號,相等的值對應(yīng)的排名不同,序號從1到n連續(xù)

rank():相等的值排名相同,但序號從1到n不連續(xù)。如果有兩個人都排在第1名,則沒有第2名。

dense_rank():對相等的值排名相同,但序號從1到n連續(xù)。如果有兩個人都排在第1名,則排在第2名的人是第3個人。


row_number()
rank()
dense_rank()

啥特點?

執(zhí)行順序:在使用 row_number() over()函數(shù)時候,over()里頭的分組以及排序的執(zhí)行,晚于?where 、group by、? order by 的執(zhí)行

其他函數(shù)也可作為開窗函數(shù),用over與聚合函數(shù)區(qū)分開來

‘count() over(partition by … order by …)

max() over(partition by … order by …)

min() over(partition by … order by …)

sum() over(partition by … order by …)

avg() over(partition by … order by …)

first_value() over(partition by … order by …)

last_value() over(partition by … order by …)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容