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

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

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值