中心如题:
先简单介绍用法:
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条数据
本博到此告一段落,如有纰漏,欢迎指正哈