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