Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mencapai Fungsi TOP n WITH TIES SQL Server dalam PostgreSQL?

Bagaimana untuk Mencapai Fungsi TOP n WITH TIES SQL Server dalam PostgreSQL?

Susan Sarandon
Susan Sarandonasal
2024-12-31 19:01:13816semak imbas

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

PostgreSQL Equivalent for TOP n WITH TIES

Apabila berurusan dengan pengambilan data dalam SQL Server, klausa TOP n WITH TIES membenarkan pengambilan semula n baris pertama jadual, termasuk mana-mana baris yang mengikat untuk kedudukan terakhir. Ciri ini memastikan bahawa semua baris dengan nilai setara dikembalikan, menghapuskan keperluan untuk pertanyaan tambahan.

Dalam PostgreSQL, tiada persamaan langsung dengan klausa WITH TIES. Walau bagaimanapun, terdapat dua pendekatan yang mencapai hasil yang sama:

Menggunakan Subkueri Kedudukan

WITH cte AS (
    SELECT *, RANK() OVER (ORDER BY <column_name>) AS rnk
    FROM tablename
)
SELECT *
FROM cte
WHERE rnk <= n;

Kaedah ini memberikan kedudukan kepada setiap baris dalam jadual, dengan hubungan yang menerima pangkat yang sama. Klausa LIMIT kemudiannya digunakan untuk mengembalikan hanya baris dengan pangkat sehingga dan termasuk n.

Menggunakan Pengagregatan Tatasusunan

Kaedah lain melibatkan penggunaan pengagregatan tatasusunan dan fungsi UNNEST untuk mengumpulkan dan mengembalikan baris yang terikat:

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;

Pendekatan ini mengagregatkan semua nilai yang berbeza daripada nums ke dalam tatasusunan, yang kemudiannya tidak bersarang untuk mengembalikan baris yang terikat. Klausa LIMIT memastikan bahawa hanya nilai n teratas dikembalikan.

PostgreSQL 13 and Beyond

Perlu diperhatikan bahawa PostgreSQL 13 memperkenalkan klausa WITH TIES, secara langsung bersamaan dengan Pelaksanaan SQL Server. Oleh itu, jika anda menggunakan PostgreSQL 13 atau lebih baru, anda boleh menggunakan sintaks berikut:

SELECT TOP n WITH TIES nums
FROM Numbers
ORDER BY nums DESC;

Ini memudahkan proses mendapatkan semula baris terikat dalam PostgreSQL, menghapuskan keperluan untuk kaedah alternatif.

Atas ialah kandungan terperinci Bagaimana untuk Mencapai Fungsi TOP n WITH TIES SQL Server dalam PostgreSQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn