Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Meniru SQL Server TOP n DENGAN IKATAN dalam PostgreSQL?

Bagaimana untuk Meniru SQL Server TOP n DENGAN IKATAN dalam PostgreSQL?

Mary-Kate Olsen
Lepaskan: 2025-01-04 00:34:38
asal
430 orang telah melayarinya

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

PostgreSQL's Equivalent to SQL Server's TOP n WITH TIES

Dalam SQL Server, klausa TOP n WITH TIES membenarkan untuk mendapatkan semula n baris teratas daripada jadual, termasuk ikatan dalam set hasil. PostgreSQL tidak mempunyai persamaan langsung dengan ciri ini. Walau bagaimanapun, terdapat kaedah alternatif untuk mencapai hasil yang serupa.

Kaedah Alternatif:

Pilihan 1: Menggunakan CTE dan Kedudukan

Dalam versi PostgreSQL sehingga 12, anda boleh menggunakan ungkapan jadual biasa (CTE) dengan fungsi pangkat() untuk mencapai kesan DENGAN IKATAN:

WITH cte AS (
   SELECT *, rank() OVER (ORDER BY <something>) AS rnk
   FROM   tbl
   )
SELECT *
FROM   cte
WHERE  rnk <= n;
Salin selepas log masuk

Sebagai contoh, dengan jadual Nombor yang mengandungi {10, 9, 8, 8, 2}, pertanyaan berikut akan mengembalikan {10, 9, 8, 8}:

WITH cte AS (
   SELECT nums, rank() OVER (ORDER BY nums DESC) AS rnk
   FROM   Numbers
   )
SELECT nums
FROM   cte
WHERE  rnk <= 3;
Salin selepas log masuk

Alternatif yang lebih pantas untuk PostgreSQL 12 dan Lebih lama:

Untuk jadual besar, kaedah alternatif berikut memberikan prestasi yang lebih pantas:

  • Setara untuk FETCH FIRST WITH TIES dalam Postgres 11 dengan prestasi yang setanding

PostgreSQL 13 dan Ke atas:

PostgreSQL 13 memperkenalkan klausa WITH TIES, menyediakan pelaksanaan asli bagi fungsi ini:

SELECT nums FROM Numbers ORDER BY nums DESC LIMIT 3 WITH TIES;
Salin selepas log masuk

Pertanyaan ini akan mengembalikan {10, 9, 8, 8} dengan betul .

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

Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan