Rumah > pangkalan data > tutorial mysql > Adakah PostgreSQL Menyokong Fungsi `TOP n WITH TIES`?

Adakah PostgreSQL Menyokong Fungsi `TOP n WITH TIES`?

Patricia Arquette
Lepaskan: 2024-12-29 22:22:23
asal
496 orang telah melayarinya

Does PostgreSQL Support `TOP n WITH TIES` Functionality?

LIMIT dengan Ties: Adakah PostgreSQL Melaksanakannya?

Dalam SQL Server, sintaks TOP n WITH TIES mendapatkan semula n baris pertama bersama-sama dengan mana-mana baris yang terikat. Walau bagaimanapun, pengguna PostgreSQL mungkin tertanya-tanya sama ada terdapat sintaks yang setara.

Penyelesaian PostgreSQL: WITH TIES (PostgreSQL 13)

Bermula dengan PostgreSQL 13, klausa TIES adalah WITH 13. diperkenalkan. Klausa ini berkelakuan serupa dengan rakan sejawat SQL Servernya, mengambil n baris teratas serta mana-mana baris yang terikat.

Alternatif untuk PostgreSQL 12 dan Lebih Lama

Sebelum PostgreSQL 13, di sana tidak setara langsung dengan TOP n WITH TIES. Satu penyelesaian adalah dengan melaksanakan pertanyaan berikut:

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

Di sini, rank() memberikan setiap baris satu pangkat dan baris yang terikat untuk pangkat n yang terakhir disertakan.

Contoh

Pertimbangkan jadual Nombor dengan nilai {10, 9, 8, 8, 2}. Pertanyaan berikut akan mengembalikan {10, 9, 8, 8} menggunakan kaedah alternatif untuk PostgreSQL 12 dan lebih lama:

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

Nota: Fungsi rank() yang digunakan dalam alternatif ini berbeza daripada dense_rank(), kerana yang terakhir akan menghasilkan hasil yang salah dengan mengembalikan terlalu banyak baris.

Atas ialah kandungan terperinci Adakah PostgreSQL Menyokong Fungsi `TOP n WITH TIES`?. 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