Äquivalent von PostgreSQL zu TOP n WITH TIES von SQL Server
In SQL Server ermöglicht die TOP n WITH TIES-Klausel das Abrufen der obersten n Zeilen aus einer Tabelle, einschließlich Bindungen im Ergebnissatz. PostgreSQL verfügt über kein direktes Äquivalent dieser Funktion. Es gibt jedoch alternative Methoden, um ein ähnliches Ergebnis zu erzielen.
Alternative Methoden:
Option 1: Verwendung von CTE und Rang
In PostgreSQL-Versionen bis 12 können Sie einen Common Table Expression (CTE) mit einer rank()-Funktion verwenden, um den Effekt von WITH zu erzielen TIES:
WITH cte AS ( SELECT *, rank() OVER (ORDER BY <something>) AS rnk FROM tbl ) SELECT * FROM cte WHERE rnk <= n;
Wenn die Zahlentabelle beispielsweise {10, 9, 8, 8, 2} enthält, würde die folgende Abfrage {10, 9, 8, 8} zurückgeben:
WITH cte AS ( SELECT nums, rank() OVER (ORDER BY nums DESC) AS rnk FROM Numbers ) SELECT nums FROM cte WHERE rnk <= 3;
Schnellere Alternativen für PostgreSQL 12 und älter:
Für große Tabellen bieten die folgenden alternativen Methoden eine schnellere Leistung:
PostgreSQL 13 und höher:
PostgreSQL 13 führt die WITH TIES-Klausel ein und stellt eine native Implementierung davon bereit Funktionalität:
SELECT nums FROM Numbers ORDER BY nums DESC LIMIT 3 WITH TIES;
Diese Abfrage würde korrekt {10, 9, 8, 8} zurückgeben.
Das obige ist der detaillierte Inhalt vonWie repliziere 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!