首頁 >資料庫 >mysql教程 >如何在PostgreSQL中模擬SQL Server的TOP n with TIES?

如何在PostgreSQL中模擬SQL Server的TOP n with TIES?

DDD
DDD原創
2025-01-04 19:01:41965瀏覽

How to Simulate SQL Server's TOP n WITH TIES in PostgreSQL?

PostgreSQL 等價於TOP n WITH TIES: LIMIT "with ties"

PostgreSQL 不提供與 Server 的 nTOP 直接等價的TIES 條款。 PostgreSQL 中的 LIMIT 子句用來指定要傳回的行數,但不包含關聯式。

使用通用表表達式(CTE) 的替代方法

在PostgreSQL 版本高達12 中,另一種方法涉及使用帶有排名函數的公共表表達式(CTE) 來模擬WITH TIES行為:

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

這裡,rank() 根據ORDER BY子句為每行分配排名。 WHERE 子句中的

PostgreSQL 12 或更早版本中大型表的更快替代方案

對於大型表,提供了比CTE 方法更快的替代方法這裡:

[相當於Postgres 11 中的FETCH FIRST with TIES,具有相當的性能](https://www.db-fiddle.com/f/h6i8rtyv234ucf653j9k8x46q/0)

PostgreSQL 13 和超越

PostgreSQL 13 和超越

SELECT *
FROM   tablename
ORDER BY nums DESC
LIMIT 3 WITH TIES;

PostgreSQL 13 和超越

13 開始,WITH TIES 子句已正式新增。此子句可以直接與LIMIT 子句一起使用,以實現所需的行為:這將根據需要返回{10, 9, 8, 8},方法是獲取前3 行並包括與第三行相連的額外8 行。

以上是如何在PostgreSQL中模擬SQL Server的TOP n with TIES?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn