您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關SQL中ROW_NUMBER函數怎么用的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
row_number的用途的非常廣泛,排序最好用他,一般可以用來實現web程序的分頁,他會為查詢出來的每一行記錄生成一個序號,依次排序且不會重復,注意使用row_number函數時必須要用over子句選擇對某一列進行排序才能生成序號。row_number用法實例:
select ROW_NUMBER() OVER(order by [SubTime] desc) as row_num,* from [Order]
查詢結果如下圖所示:
圖中的row_num列就是row_number函數生成的序號列,其基本原理是先使用over子句中的排序語句對記錄進行排序,然后按照這個順序生成序號。over子句中的order by子句與SQL語句中的order by子句沒有任何關系,這兩處的order by 可以完全不同,如以下sql,over子句中根據SubTime降序排列,Sql語句中則按TotalPrice降序排列。
select ROW_NUMBER() OVER(order by [SubTime] desc) as row_num,* from [Order] order by [TotalPrice] desc
查詢結果如下圖所示:
利用row_number可以實現web程序的分頁,我們來查詢指定范圍的表數據。例:根據訂單提交時間倒序排列獲取第三至第五條數據。
with orderSection as( select ROW_NUMBER() OVER(order by [SubTime] desc) rownum,* from [Order])select * from [orderSection] where rownum between 3 and 5 order by [SubTime] desc
查詢結果如下圖所示:
注意:在使用row_number實現分頁時需要特別注意一點,over子句中的order by 要與Sql排序記錄中的order by 保持一致,否則得到的序號可能不是連續的。下面我們寫一個例子來證實這一點,將上面Sql語句中的排序字段由SubTime改為TotalPrice。另外提一下,對于帶有子查詢和CTE的查詢,子查詢和CTE查詢有序并不代表整個查詢有序,除非顯示指定了order by。
with orderSection as( select ROW_NUMBER() OVER(order by [SubTime] desc) rownum,* from [Order])select * from [orderSection] where rownum between 3 and 5 order by [TotalPrice] desc
查詢結果如下圖所示:
感謝各位的閱讀!關于“SQL中ROW_NUMBER函數怎么用”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。