Heim >Datenbank >MySQL-Tutorial >Unterstützt PostgreSQL die Funktionalität „TOP n WITH TIES'?
LIMIT mit Ties: Hat PostgreSQL es implementiert?
In SQL Server ruft die Syntax TOP n WITH TIES die ersten n Zeilen zusammen mit ab alle gebundenen Reihen. PostgreSQL-Benutzer fragen sich jedoch möglicherweise, ob es eine entsprechende Syntax gibt.
PostgreSQLs Lösung: WITH TIES (PostgreSQL 13)
Ab PostgreSQL 13 gab es die WITH TIES-Klausel eingeführt. Diese Klausel verhält sich ähnlich wie ihr SQL Server-Gegenstück und ruft die obersten n Zeilen sowie alle gebundenen Zeilen ab.
Alternative für PostgreSQL 12 und älter
Vor PostgreSQL 13, dort war kein direktes Äquivalent von TOP n WITH TIES. Eine Problemumgehung besteht darin, die folgende Abfrage auszuführen:
WITH cte AS ( SELECT *, rank() OVER (ORDER BY <something>) AS rnk FROM tbl ) SELECT * FROM cte WHERE rnk <= n;
Hier weist rank() jeder Zeile einen Rang zu, und Zeilen, die für den letzten Rang n gebunden sind, werden einbezogen.
Beispiel
Betrachten Sie eine Tabelle mit Zahlen mit den Werten {10, 9, 8, 8, 2}. Die folgende Abfrage würde {10, 9, 8, 8} unter Verwendung der alternativen Methode für PostgreSQL 12 und älter zurückgeben:
WITH cte AS ( SELECT nums, rank() OVER (ORDER BY nums DESC) AS rnk FROM Numbers ) SELECT * FROM cte WHERE rnk <= 3;
Hinweis: Die in dieser Alternative verwendete rank()-Funktion unterscheidet sich von dense_rank(), da letzteres zu falschen Ergebnissen führen würde, indem es zu viele Zeilen zurückgibt.
Das obige ist der detaillierte Inhalt vonUnterstützt PostgreSQL die Funktionalität „TOP n WITH TIES'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!