首页 >数据库 >mysql教程 >PostgreSQL 是否支持'TOP n WITH TIES”功能?

PostgreSQL 是否支持'TOP n WITH TIES”功能?

Patricia Arquette
Patricia Arquette原创
2024-12-29 22:22:23503浏览

Does PostgreSQL Support `TOP n WITH TIES` Functionality?

LIMIT with Ties:PostgreSQL 实现了吗?

在 SQL Server 中,语法 TOP n WITH TIES 检索前 n 行以及任何捆绑的行。然而,PostgreSQL 用户可能想知道是否有等效的语法。

PostgreSQL 的解决方案:WITH TIES (PostgreSQL 13)

从 PostgreSQL 13 开始,WITH TIES 子句是介绍了。此子句的行为与其 SQL Server 对应子句类似,获取前 n 行以及任何关联行。

PostgreSQL 12 及更早版本的替代方案

在 PostgreSQL 13 之前,有与 TOP n with TIES 没有直接等价物。一种解决方法是执行以下查询:

WITH cte AS (
   SELECT *, rank() OVER (ORDER BY <something>) AS rnk
   FROM   tbl
   )
SELECT *
FROM   cte
WHERE  rnk <= n;

这里,rank() 为每一行分配一个排名,并包括与最后排名 n 相关的行。

示例

考虑一个值为 {10, 9, 8, 8, 2} 的 Numbers 表。以下查询将使用 PostgreSQL 12 及更早版本的替代方法返回 {10, 9, 8, 8}:

WITH cte AS (
   SELECT nums, rank() OVER (ORDER BY nums DESC) AS rnk
   FROM   Numbers
   )
SELECT *
FROM   cte
WHERE  rnk <= 3;

注意: 此替代方案中使用的rank()函数与dense_rank()不同,因为后者会返回太多行而产生不正确的结果。

以上是PostgreSQL 是否支持'TOP n WITH TIES”功能?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn