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;
返回結果: