Équivalent PostgreSQL pour TOP n AVEC TIES : LIMIT "avec liens"
PostgreSQL n'offre pas d'équivalent direct au TOP n AVEC de SQL Server Clause TIES. La clause LIMIT dans PostgreSQL est utilisée pour spécifier le nombre de lignes à renvoyer, mais elle n'inclut pas les liens.
Approche alternative utilisant des expressions de table communes (CTE)
Dans les versions de PostgreSQL jusqu'à 12, une approche alternative consiste à utiliser une expression de table commune (CTE) avec une fonction de classement pour simuler l'expression AVEC TIES. behavior :
WITH cte AS ( SELECT *, rank() OVER (ORDER BY <something>) AS rnk FROM tbl ) SELECT * FROM cte WHERE rnk <= n;
Ici, Rank() attribue un classement à chaque ligne en fonction de la clause ORDER BY. La comparaison <= dans la clause WHERE garantit que toutes les lignes dont le rang est inférieur ou égal à n sont sélectionnées, y compris les égalités.
Alternatives plus rapides pour les grandes tables dans PostgreSQL 12 ou version antérieure
Pour les grandes tables, une approche alternative plus rapide que la méthode CTE est proposée ici :
[Équivalent à FETCH FIRST WITH TIES dans Postgres 11 avec des performances comparables](https://www.db-fiddle.com/f/h6i8rtyv234ucf653j9k8x46q/0)
PostgreSQL 13 et Au-delà
Depuis PostgreSQL 13, la clause WITH TIES a été officiellement ajoutée. Cette clause peut être utilisée directement avec la clause LIMIT pour obtenir le comportement souhaité :
SELECT * FROM tablename ORDER BY nums DESC LIMIT 3 WITH TIES;
Cela renverra {10, 9, 8, 8}, comme vous le souhaitez, en prenant les 3 premières lignes et en incluant les 8 rangées supplémentaires à égalité avec la troisième rangée.
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!