pgsql 根据查询的数据取不同的别名_数据库实战踩坑指南1:取前N项,需要WITH TIES...

SQL查询中,取前N名看似简单,但遇到并列情况可能不符合预期。文章介绍了如何在SQL:2008标准下使用`WITH TIES`解决这一问题,特别是在SQL Server和PgSQL中的实现差异,以及MySQL因不支持此功能而需要使用子查询的复杂解决方案。
摘要由CSDN通过智能技术生成

在sql查询中,取前N项几乎是最为入门的操作了,怎么这里也有坑吗?

当然有的哦!

一个最简单的场景,我们企图在一个学生成绩表中查询前三名。语句应该类似于:

// SQL server:
Select top 3 * from 成绩表 order by 成绩 desc  

// MySQL、PGSql:
SELECT * FROM 成绩表  order by 成绩 desc LIMIT 3

上面的查询,将会得到3条记录(假设记录数大于3条)。

但是:有没有想到有这样一种场景:有5个人并列第三名了,语句的执行结果还符合预期吗?

这时,我们需要使用SQL:2008标准里引入的关键字“WITH TIES”了。它将会带来“并列第三名”的查询效果——当然,出于可以理解的原因,这个关键字必须和order by联合使用。同时,需要注意在不同的数据库上,对标准的实现是各不相同的。

如Sql server 的实现,看起来就比较简练,毕竟少了Fetch关键词嘛!

Select top 3 with ties * from 成绩表 order by 成绩 desc

而PgSQL (13及更高)看起来就比较冗长。留意limit关键字已经被直接替换了

SELECT * FROM 成绩表  order by 成绩 desc fetch fi
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值