Heim > Datenbank > MySQL-Tutorial > Wie repliziere ich das TOP n WITH TIES von SQL Server in PostgreSQL?

Wie repliziere ich das TOP n WITH TIES von SQL Server in PostgreSQL?

Mary-Kate Olsen
Freigeben: 2025-01-04 00:34:38
Original
385 Leute haben es durchsucht

How to Replicate SQL Server's TOP n WITH TIES in PostgreSQL?

Ä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;
Nach dem Login kopieren

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;
Nach dem Login kopieren

Schnellere Alternativen für PostgreSQL 12 und älter:

Für große Tabellen bieten die folgenden alternativen Methoden eine schnellere Leistung:

  • Entspricht FETCH FIRST WITH TIES in Postgres 11 mit vergleichbarer 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;
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage