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
398 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!

sumber:php.cn
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