PostgreSQL-Äquivalent für TOP n WITH TIES: LIMIT „with ties“
PostgreSQL bietet kein direktes Äquivalent zu TOP n WITH von SQL Server TIES-Klausel. Die LIMIT-Klausel in PostgreSQL wird verwendet, um die Anzahl der zurückzugebenden Zeilen anzugeben, enthält jedoch keine Bindungen.
Alternativer Ansatz mit Common Table Expressions (CTEs)
In PostgreSQL-Versionen bis 12 besteht ein alternativer Ansatz darin, einen Common Table Expression (CTE) mit einer Ranking-Funktion zu verwenden, um WITH TIES zu simulieren Verhalten:
WITH cte AS ( SELECT *, rank() OVER (ORDER BY <something>) AS rnk FROM tbl ) SELECT * FROM cte WHERE rnk <= n;
Hier weist rank() jeder Zeile basierend auf der ORDER BY-Klausel eine Rangfolge zu. Der <=-Vergleich in der WHERE-Klausel stellt sicher, dass alle Zeilen mit einem Rang kleiner oder gleich n ausgewählt werden, einschließlich etwaiger Bindungen.
Schnellere Alternativen für große Tabellen in PostgreSQL 12 oder älter
Für große Tabellen wird ein alternativer Ansatz bereitgestellt, der schneller als die CTE-Methode ist hier:
[Äquivalent für FETCH FIRST WITH TIES in Postgres 11 mit vergleichbarer Leistung](https://www.db-fiddle.com/f/h6i8rtyv234ucf653j9k8x46q/0)
PostgreSQL 13 und Darüber hinaus
Ab PostgreSQL 13 wurde die WITH TIES-Klausel offiziell hinzugefügt. Diese Klausel kann direkt mit der LIMIT-Klausel verwendet werden, um das gewünschte Verhalten zu erreichen:
SELECT * FROM tablename ORDER BY nums DESC LIMIT 3 WITH TIES;
Dies gibt wie gewünscht {10, 9, 8, 8} zurück, indem die obersten 3 Zeilen genommen und die eingeschlossen werden zusätzliche 8 Reihen, die mit der dritten Reihe verbunden sind.
Das obige ist der detaillierte Inhalt vonWie simuliere ich das TOP n WITH TIES von SQL Server in PostgreSQL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!