Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mensimulasikan SQL Server TOP n DENGAN IKATAN dalam PostgreSQL?
PostgreSQL Equivalent for TOP n WITH TIES: LIMIT "with ties"
PostgreSQL tidak menawarkan setara langsung dengan TOP n WITH SQL Server Klausa TIES. Klausa LIMIT dalam PostgreSQL digunakan untuk menentukan bilangan baris untuk dikembalikan, tetapi ia tidak termasuk ikatan.
Pendekatan Alternatif Menggunakan Ungkapan Jadual Biasa (CTE)
Dalam versi PostgreSQL sehingga 12, pendekatan alternatif melibatkan penggunaan Common Table Expression (CTE) dengan fungsi ranking untuk simulasikan gelagat WITH TIES:
WITH cte AS ( SELECT *, rank() OVER (ORDER BY <something>) AS rnk FROM tbl ) SELECT * FROM cte WHERE rnk <= n;
Di sini, rank() memberikan kedudukan kepada setiap baris berdasarkan klausa ORDER BY. Perbandingan <= dalam klausa WHERE memastikan bahawa semua baris dengan kedudukan kurang daripada atau sama dengan n dipilih, termasuk sebarang ikatan.
Alternatif Lebih Pantas untuk Jadual Besar dalam PostgreSQL 12 atau Lebih Lama
Untuk meja besar, pendekatan alternatif yang lebih pantas daripada kaedah CTE disediakan di sini:
[Setara untuk FETCH FIRST WITH TIES dalam Postgres 11 dengan prestasi setanding](https://www.db-fiddle.com/f/h6i8rtyv234ucf653j9k8x46q/0)
Sehingga PostgreSQL 13, klausa WITH TIES telah ditambah secara rasmi. Klausa ini boleh digunakan terus dengan klausa LIMIT untuk mencapai gelagat yang diingini:SELECT * FROM tablename ORDER BY nums DESC LIMIT 3 WITH TIES;Ini akan mengembalikan {10, 9, 8, 8}, seperti yang dikehendaki, dengan mengambil 3 baris teratas dan termasuk tambahan 8 baris yang terikat dengan baris ketiga.
Atas ialah kandungan terperinci Bagaimana untuk Mensimulasikan SQL Server TOP n DENGAN IKATAN dalam PostgreSQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!