Maison >base de données >tutoriel mysql >PostgreSQL prend-il en charge la fonctionnalité « TOP n WITH TIES » ?

PostgreSQL prend-il en charge la fonctionnalité « TOP n WITH TIES » ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-29 22:22:23515parcourir

Does PostgreSQL Support `TOP n WITH TIES` Functionality?

LIMIT avec Ties : PostgreSQL l'a-t-il implémenté ?

Dans SQL Server, la syntaxe TOP n WITH TIES récupère les n premières lignes ainsi que toutes les lignes liées. Cependant, les utilisateurs de PostgreSQL se demandent peut-être s'il existe une syntaxe équivalente.

Solution de PostgreSQL : WITH TIES (PostgreSQL 13)

À partir de PostgreSQL 13, la clause WITH TIES était introduit. Cette clause se comporte de la même manière que son homologue SQL Server, récupérant les n premières lignes ainsi que toutes les lignes liées.

Alternative pour PostgreSQL 12 et versions antérieures

Avant PostgreSQL 13, il n'avait pas d'équivalent direct de TOP n WITH TIES. Une solution de contournement consiste à exécuter la requête suivante :

WITH cte AS (
   SELECT *, rank() OVER (ORDER BY <something>) AS rnk
   FROM   tbl
   )
SELECT *
FROM   cte
WHERE  rnk <= n;

Ici, Rank() attribue à chaque ligne un rang et les lignes à égalité pour le dernier rang n sont incluses.

Exemple

Considérons un tableau Nombres avec les valeurs {10, 9, 8, 8, 2}. La requête suivante renverrait {10, 9, 8, 8} en utilisant la méthode alternative pour PostgreSQL 12 et versions antérieures :

WITH cte AS (
   SELECT nums, rank() OVER (ORDER BY nums DESC) AS rnk
   FROM   Numbers
   )
SELECT *
FROM   cte
WHERE  rnk <= 3;

Remarque : La fonction Rank() utilisée dans cette alternative est différent de dense_rank(), car cette dernière produirait des résultats incorrects en renvoyant trop de lignes.

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