Maison > base de données > tutoriel mysql > Comment répliquer le TOP n WITH TIES de SQL Server dans PostgreSQL ?

Comment répliquer le TOP n WITH TIES de SQL Server dans PostgreSQL ?

Mary-Kate Olsen
Libérer: 2025-01-04 00:34:38
original
385 Les gens l'ont consulté

How to Replicate SQL Server's TOP n WITH TIES in PostgreSQL?

É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;
Copier après la connexion

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;
Copier après la connexion

Alternatives plus rapides pour PostgreSQL 12 et versions antérieures :

Pour grandes tables, les méthodes alternatives suivantes offrent des performances plus rapides :

  • Équivalent à FETCH FIRST WITH TIES dans Postgres 11 avec des performances comparables

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;
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal