Postgre SQL ROW_NUMBER( ) OVER ( ) 用法通俗詳解

中心如題:

先簡單介紹用法

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條數據

本博到此告一段落,如有紕漏,歡迎指正哈

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