是什么?
開窗函數(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個人。



啥特點?
執(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 …)
’