Maison >base de données >tutoriel mysql >Comment obtenir la fonctionnalité TOP n WITH TIES de SQL Server dans PostgreSQL ?

Comment obtenir la fonctionnalité TOP n WITH TIES de SQL Server dans PostgreSQL ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-31 19:01:13843parcourir

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

Équivalent PostgreSQL pour TOP n WITH TIES

Lors de la récupération de données dans SQL Server, la clause TOP n WITH TIES permet la récupération de les n premières lignes d'un tableau, y compris toutes les lignes qui sont à égalité pour la dernière position. Cette fonctionnalité garantit que toutes les lignes avec des valeurs équivalentes sont renvoyées, éliminant ainsi le besoin de requêtes supplémentaires.

Dans PostgreSQL, il n'y a pas d'équivalent direct à la clause WITH TIES. Cependant, il existe deux approches qui aboutissent au même résultat :

Utilisation d'une sous-requête de classement

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

Cette méthode attribue un rang à chaque ligne du tableau, avec liens recevant le même rang. La clause LIMIT est ensuite utilisée pour renvoyer uniquement les lignes dont les rangs vont jusqu'à n inclus.

Utilisation de l'agrégation de tableaux

Une autre méthode consiste à utiliser l'agrégation de tableaux et la fonction UNNEST pour regrouper et renvoyer les lignes liées :

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;

Cette approche regroupe toutes les valeurs distinctes de nombres dans un tableau, qui est ensuite désimbriqué pour renvoyer les lignes liées. La clause LIMIT garantit que seules les n premières valeurs sont renvoyées.

PostgreSQL 13 et au-delà

Il convient de noter que PostgreSQL 13 a introduit la clause WITH TIES, directement équivalente à Implémentation de SQL Server. Par conséquent, si vous utilisez PostgreSQL 13 ou version ultérieure, vous pouvez utiliser la syntaxe suivante :

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

Cela simplifie le processus de récupération des lignes liées dans PostgreSQL, éliminant ainsi le besoin de méthodes alternatives.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn