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