Heim >Datenbank >MySQL-Tutorial >Unterstützt PostgreSQL die Funktionalität „TOP n WITH TIES'?

Unterstützt PostgreSQL die Funktionalität „TOP n WITH TIES'?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-29 22:22:23506Durchsuche

Does PostgreSQL Support `TOP n WITH TIES` Functionality?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn