PostgreSQL 相当于 SQL Server 的 TOP n WITH TIES
在 SQL Server 中,TOP n WITH TIES 子句允许检索前 n 行来自表格,包括结果集中的关系。 PostgreSQL 没有与此功能直接等效的功能。但是,还有其他方法可以实现类似的结果。
替代方法:
选项 1:使用 CTE 和 Rank
在 PostgreSQL 12 版本之前,您可以使用公共表表达式(CTE)和rank()函数来实现WITH TIES 的效果:
WITH cte AS ( SELECT *, rank() OVER (ORDER BY <something>) AS rnk FROM tbl ) SELECT * FROM cte WHERE rnk <= n;
例如,对于包含 {10, 9, 8, 8, 2} 的 Numbers 表,以下查询将返回 {10, 9, 8, 8}:
WITH cte AS ( SELECT nums, rank() OVER (ORDER BY nums DESC) AS rnk FROM Numbers ) SELECT nums FROM cte WHERE rnk <= 3;
PostgreSQL 12 和 的更快替代方案旧版:
对于大型表,以下替代方法可提供更快的性能:
PostgreSQL 13 和上:
PostgreSQL 13 引入了WITH TIES 子句,提供了此功能的本机实现:
SELECT nums FROM Numbers ORDER BY nums DESC LIMIT 3 WITH TIES;
此查询将正确返回 {10, 9, 8, 8} .
以上是如何在 PostgreSQL 中复制 SQL Server 的 TOP n WITH TIES?的详细内容。更多信息请关注PHP中文网其他相关文章!