首頁 >資料庫 >mysql教程 >如何在PostgreSQL中實作SQL Server的TOP n WITH TIES功能?

如何在PostgreSQL中實作SQL Server的TOP n WITH TIES功能?

Susan Sarandon
Susan Sarandon原創
2024-12-31 19:01:13825瀏覽

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

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

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