Maison >base de données >tutoriel mysql >Comment obtenir la fonctionnalité TOP n WITH TIES de SQL Server dans 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!