Maison >base de données >tutoriel mysql >Comment puis-je récupérer efficacement les valeurs maximales et leurs données associées dans SQL ?

Comment puis-je récupérer efficacement les valeurs maximales et leurs données associées dans SQL ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-07 17:01:41768parcourir

How Can I Efficiently Retrieve Maximum Values and Their Associated Data in SQL?

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 :

  1. 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>
  2. 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!

Déclaration:
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