Heim >Datenbank >MySQL-Tutorial >Wie erreicht man die TOP n WITH TIES-Funktionalität von SQL Server in PostgreSQL?

Wie erreicht man die TOP n WITH TIES-Funktionalität von SQL Server in PostgreSQL?

Susan Sarandon
Susan SarandonOriginal
2024-12-31 19:01:13843Durchsuche

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

PostgreSQL-Äquivalent für TOP n WITH TIES

Beim Umgang mit dem Datenabruf in SQL Server ermöglicht die TOP n WITH TIES-Klausel den Abruf von die ersten n Zeilen einer Tabelle, einschließlich aller Zeilen, die die letzte Position belegen. Diese Funktion stellt sicher, dass alle Zeilen mit äquivalenten Werten zurückgegeben werden, sodass keine zusätzlichen Abfragen erforderlich sind.

In PostgreSQL gibt es kein direktes Äquivalent zur WITH TIES-Klausel. Es gibt jedoch zwei Ansätze, die das gleiche Ergebnis erzielen:

Verwendung einer Rang-Unterabfrage

WITH cte AS (
    SELECT *, RANK() OVER (ORDER BY <column_name>) AS rnk
    FROM tablename
)
SELECT *
FROM cte
WHERE rnk <= n;

Diese Methode weist jeder Zeile in der Tabelle einen Rang zu, mit Krawatten erhalten den gleichen Rang. Die LIMIT-Klausel wird dann verwendet, um nur die Zeilen mit Rängen bis einschließlich n zurückzugeben.

Array-Aggregation verwenden

Eine andere Methode beinhaltet die Verwendung der Array-Aggregation und der UNNEST-Funktion um verbundene Zeilen zu gruppieren und zurückzugeben:

SELECT UNNEST(
    ARRAY_AGG(DISTINCT nums) OVER (
        ORDER BY nums DESC
        ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
    )
) AS nums
FROM Numbers
ORDER BY nums DESC
LIMIT n;

Dieser Ansatz fasst alle unterschiedlichen Werte von Zahlen in einem Array zusammen. die dann entschachtelt wird, um die gebundenen Zeilen zurückzugeben. Die LIMIT-Klausel stellt sicher, dass nur die obersten n Werte zurückgegeben werden.

PostgreSQL 13 und darüber hinaus

Es ist erwähnenswert, dass PostgreSQL 13 die WITH TIES-Klausel eingeführt hat, die direkt äquivalent ist Implementierung von SQL Server. Wenn Sie PostgreSQL 13 oder höher verwenden, können Sie daher die folgende Syntax verwenden:

SELECT TOP n WITH TIES nums
FROM Numbers
ORDER BY nums DESC;

Dies vereinfacht den Prozess des Abrufens gebundener Zeilen in PostgreSQL und macht alternative Methoden überflüssig.

Das obige ist der detaillierte Inhalt vonWie erreicht man die TOP n WITH TIES-Funktionalität von SQL Server in PostgreSQL?. 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