PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Setara dengan PostgreSQL untuk TOP n WITH TIES:LIMIT with ties?

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Solusi Ketersediaan Tinggi Pengelompokan PG Teratas untuk PostgreSQL

  2. Hitung jam kerja antara 2 tanggal di PostgreSQL

  3. Bagaimana cara memilih id dengan grup tanggal maksimum berdasarkan kategori di PostgreSQL?

  4. Tentang kegunaan indeks ekspresi

  5. Bagaimana saya bisa mengekspor skema database di PostgreSQL?