Équivalent de PostgreSQL au TOP n WITH TIES de SQL Server
Dans SQL Server, la clause TOP n WITH TIES permet de récupérer les n premières lignes à partir d'une table, y compris les liens dans l'ensemble de résultats. PostgreSQL n'a pas d'équivalent direct de cette fonctionnalité. Cependant, il existe des méthodes alternatives pour obtenir un résultat similaire.
Méthodes alternatives :
Option 1 : Utilisation du CTE et du classement
Dans les versions de PostgreSQL jusqu'à 12, vous pouvez utiliser une expression de table commune (CTE) avec une fonction Rank() pour obtenir l'effet de AVEC TIES :
WITH cte AS ( SELECT *, rank() OVER (ORDER BY <something>) AS rnk FROM tbl ) SELECT * FROM cte WHERE rnk <= n;
Par exemple, avec la table Numbers contenant {10, 9, 8, 8, 2}, la requête suivante renverrait {10, 9, 8, 8} :
WITH cte AS ( SELECT nums, rank() OVER (ORDER BY nums DESC) AS rnk FROM Numbers ) SELECT nums FROM cte WHERE rnk <= 3;
Alternatives plus rapides pour PostgreSQL 12 et versions antérieures :
Pour grandes tables, les méthodes alternatives suivantes offrent des performances plus rapides :
PostgreSQL 13 et versions ultérieures :
PostgreSQL 13 introduit la clause WITH TIES, fournissant une implémentation native de cette fonctionnalité :
SELECT nums FROM Numbers ORDER BY nums DESC LIMIT 3 WITH TIES;
Cette requête renverrait correctement {10, 9, 8, 8}.
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!