Optimisation des requêtes SQL : récupération des valeurs maximales et des données associées
Extraire efficacement les valeurs maximales ainsi que les données associées à partir d'autres colonnes est une tâche SQL fréquente. Pour les grands ensembles de données, les méthodes standard telles que les sélections imbriquées ou les requêtes GROUP BY
simples peuvent être inefficaces.
Considérons un tableau avec des colonnes ID
, tag
et version
. Le but est de trouver le maximum version
pour chaque ID
unique et de récupérer le tag
correspondant.
Une solution très efficace utilise la ROW_NUMBER()
fonction de fenêtre :
Classer les lignes : Une sous-requête attribue un classement à chaque ligne en fonction de la colonne version
(ordre décroissant), partitionnée par la colonne ID
:
<code class="language-sql">SELECT t.*, ROW_NUMBER() OVER (PARTITION BY t.id ORDER BY t.version DESC) AS rnk FROM YourTable t</code>
Filtre pour les versions maximales : La requête externe sélectionne uniquement les lignes dont le rang (rnk
) est 1. Cela isole la ligne avec le version
le plus élevé pour chaque ID
:
<code class="language-sql">SELECT s.id, s.tag, s.version FROM ( SELECT t.*, ROW_NUMBER() OVER (PARTITION BY t.id ORDER BY t.version DESC) AS rnk FROM YourTable t ) s WHERE s.rnk = 1</code>
Cette méthode évite les sélections imbriquées et les opérations GROUP BY
coûteuses, ce qui la rend beaucoup plus rapide pour les grands ensembles de données tout en conservant la précision. C'est une approche privilégiée pour des performances optimales dans de tels scénarios.
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!