SQL中row_number() over(partition by)詳解

row_number 語法

ROW_NUMBER()函數將針對SELECT語句返回的每一行,從1開始編號,賦予其連續的編號。在查詢時應用了一個排序標準後,只有通過編號才能夠保證其順序是一致的,當使用ROW_NUMBER函數時,也需要專門一列用於預先排序以便於進行編號

partition by關鍵字是分析性函數的一部分,它和聚合函數不同的地方在於它能返回一個分組中的多條記錄,而聚合函數一般只有一條反映統計值的記錄,partition by用於給結果集分組,如果沒有指定那麼它把整個結果集作爲一個分組,分區函數一般與排名函數一起使用。

原始表score:

s_id 表是學生編號,c_id表是課程編號,s_score 表是學生對應的課程分數

在這裏插入圖片描述

1.要求:得出每門課程的學生成績排序(升序)

----因爲是每門課程的結果,並且要排序,所以用row_number

select * ,row_number() over (partition by c_id order by s_score) from score;

返回結果:

在這裏插入圖片描述

2:進一步要求:得出每門課程的學生成績,並且按照70分作爲分割線排序—即低於70分的排序,高於70分的排序

select * ,row_number() over (partition by c_id,(case when s_score>70 then 1 else 0 end) order by s_score) from score;

返回結果:

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章