中心如題:
先簡單介紹用法:
row_number() 爲返回的記錄生成行編號
廢話不多說,上圖,上sql, 開懟
以學生表爲例:
表數據如下
現在想拿到成績爲倒數第二的 學生 的所有信息。
首先看一下下面這條sql的執行結果
SELECT * FROM
(SELECT ROW_NUMBER () OVER (ORDER BY stu.score asc) as row_id,
*
FROM
student stu
)datas
ORDER BY datas.row_id asc
row_id 這一列 就是我們通過 row_number( ) over( xxxx) 生成的行編號
我們想要拿到成績爲倒數第二的 只需要 增加條件 where row_id='2' 即可
如下圖:
SELECT * FROM
(SELECT ROW_NUMBER () OVER (ORDER BY stu.score asc) as row_id,
*
FROM
student stu
)datas
where row_id='2'
ORDER BY datas.row_id asc
該函數的用法就到此告一段落。 如果只是針對本博客中的需求的話,獲取還有更好的sql實現方式,我只是隨便拿了一個需求來介紹用法。
我補充一個實現該需求的方式,不過不是在postgre的數據庫中。在mysql oracle 這些應該是都可以應用的,大家可以自行測試
select top 1 * from (select top 2 * from student order by score asc) order by score desc
top n 是指對結果保留n條數據
本博到此告一段落,如有紕漏,歡迎指正哈