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

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

DDD
發布: 2025-01-04 19:01:41
原創
994 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板