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