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

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

DDD
Freigeben: 2025-01-04 19:01:41
Original
969 Leute haben es durchsucht

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

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

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

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!

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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage