有關排名排序的三種常用視窗函式
(1) select rank over( order by scores desc ) from table
這種排序是允許並列,並且保留空缺,兩個第1名,沒有第2名,排名是1,1,3
(2)select dense_rank over(order by scores desc) from table
這種排序是允許並列,不留空,兩個第1名,接下來就是第2名,排名是1,1,2
(3)select row_number() over(order by score desc) from table
這種是不允許並列,如果分數是100,100,99 ,這裡的排名依舊是1,2,3
4)select ntitle(10) over(order by score desc ) from table
呈現的結果是將分數平均分成10個一組的子集,假如90分以上的有10個,他們就是子集1 ,假如80-90分的有19個,那麼一般前10個是子集2,後9個是子集3
ntile( n ) over():
將資料集先排序,再平均分配到指定的數量為n的集合中,排序對應的數字為分類後的子集序列號。如果不能平均分配,較小的子集分配額外行,並各個子集中能放的資料條數最多差1
常用聚合函式與視窗函式結合使用
實際上相當於分類彙總後求聚合,下面是同樣 的聚合函式,使用不同的字句或者不加字句出現的不同結果
over字句中為空的,顯示的是前面聚合函式的結果,這裡是所有salary的和
[over字句中為order by 的,顯示的是排序後以自己以及前面的結果的和]
[over字句中為partition by 的,顯示的是以city 分組後求和再排序的結果]
order by 的高階操作
開窗函式中可以在over關鍵字後的選項中使用order by子句來指定排序規則,而且有的開窗函式還要求必須指定排序規則。使用order by子句可以對結果集按
照指定的排序規則進行排序,並且在乙個指定的範圍內進行聚合運算。order by子句的語法為:
order by 欄位名 range|rows between 邊界規則1 and 邊界規則2
開窗函式介紹
sql開窗函式
mysql8.0之前的版本是不支援開窗函式的,8.0之後才支援。開窗函式與聚合函式的計算方式一樣,也是對行集組進行聚合計算,但是它不像普通聚合函式那樣每組只返回乙個值,開窗函式可以為每組返回多個值。假設有乙個員工資訊表worker,資料如下圖一。如果我們要計算所有人或者每個年齡的平均工資,可通過聚合...
sql函式 開窗函式簡介
與聚合函式一樣,開窗函式也是對行集組進行聚合計算,但是普通聚合函式每組只能返回乙個值,而開窗函式可以每組返回多個值。實驗一比如我們想查詢每個工資小於5000元的員工資訊 城市以及年齡 並且在每行中都顯示所有工資小於5000元的員工個數,執行下面的sql語句 select t.fcity,t.fage...
rank 開窗函式 排序類開窗函式
1,row number over 排序,連續 select score,row number over from sc 按原始 的成績順序進行排序 原始 成績順序 先將分數從大到小排序,分數相同,排名不同 select score,row number over order by score fr...