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

中心如题:

先简单介绍用法

row_number() 为返回的记录生成行编号

 

废话不多说,上图,上sql, 开怼

以学生表为例:

表数据如下

Postgre SQL ROW_NUMBER( ) OVER ( ) 用法通俗详解_第1张图片

现在想拿到成绩为倒数第二的  学生  的所有信息。

首先看一下下面这条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

Postgre SQL ROW_NUMBER( ) OVER ( ) 用法通俗详解_第2张图片

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条数据

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

你可能感兴趣的:(随笔记录)