Postgres 13 akhirnya menambahkan WITH TIES
. Lihat:
- Lebih dari atau sama dengan ALL() dan sama dengan MAX() kecepatan
Tidak ada WITH TIES
klausa hingga PostgreSQL 12, seperti yang ada di SQL Server.
Dalam PostgreSQL saya akan mengganti ini dengan TOP n WITH TIES .. ORDER BY <something>
:
WITH cte AS (
SELECT *, rank() OVER (ORDER BY <something>) AS rnk
FROM tbl
)
SELECT *
FROM cte
WHERE rnk <= n;
Untuk lebih jelasnya, rank()
benar, dense_rank()
akan salah (mengembalikan terlalu banyak baris).
Pertimbangkan kutipan ini dari dokumen SQL Server (dari tautan di atas):
Misalnya, jika ekspresi diatur ke 5 tetapi 2 baris tambahan cocok dengan nilai kolom ORDER BY di baris 5, kumpulan hasil akan berisi 7 baris.
Tugas WITH TIES
adalah memasukkan semua rekan dari baris terakhir di atas n seperti yang didefinisikan oleh ORDER BY
ayat. rank()
memberikan hasil yang sama persis.
Untuk memastikannya, saya menguji dengan SQL server, berikut adalah demo langsungnya.
Dan inilah SQLfiddle yang lebih nyaman.