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!