PostgreSQL 等价于 TOP nWITH TIES
在 SQL Server 中处理数据检索时,TOP nWITH TIES 子句允许检索表的前 n 行,包括与最后一个位置相关的所有行。此功能可确保返回具有等效值的所有行,从而无需进行额外的查询。
在 PostgreSQL 中,没有与 WITH TIES 子句直接等效的语句。但是,有两种方法可以达到相同的结果:
使用排名子查询
WITH cte AS ( SELECT *, RANK() OVER (ORDER BY <column_name>) AS rnk FROM tablename ) SELECT * FROM cte WHERE rnk <= n;
此方法为表中的每一行分配一个排名,其中领带获得相同的排名。然后,使用 LIMIT 子句仅返回排名不超过 n 的行。
使用数组聚合
另一种方法涉及使用数组聚合和 UNNEST 函数分组并返回绑定行:
SELECT UNNEST( ARRAY_AGG(DISTINCT nums) OVER ( ORDER BY nums DESC ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) ) AS nums FROM Numbers ORDER BY nums DESC LIMIT n;
此方法将 nums 的所有不同值聚合到一个数组中,然后取消嵌套以返回绑定的行。 LIMIT 子句确保只返回前 n 个值。
PostgreSQL 13 及以后
值得注意的是,PostgreSQL 13 引入了WITH TIES 子句,直接相当于SQL Server 的实现。因此,如果您使用 PostgreSQL 13 或更高版本,则可以使用以下语法:
SELECT TOP n WITH TIES nums FROM Numbers ORDER BY nums DESC;
这简化了在 PostgreSQL 中检索绑定行的过程,无需使用替代方法。
以上是如何在PostgreSQL中实现SQL Server的TOP n WITH TIES功能?的详细内容。更多信息请关注PHP中文网其他相关文章!