Maison >base de données >tutoriel mysql >Comment sélectionner les deux premières lignes de chaque groupe dans SQL ?

Comment sélectionner les deux premières lignes de chaque groupe dans SQL ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-31 15:13:13601parcourir

How to Select the Top Two Rows for Each Group in SQL?

Sélection des deux premières lignes de chaque groupe SQL

En SQL, une tâche courante consiste à récupérer uniquement les premières lignes de chaque groupe. Cependant, les fonctions d'agrégation standard pour le regroupement (telles que MAX() et MIN()) permettent uniquement la sélection de la valeur la plus élevée ou la plus basse.

Requête pour sélectionner les deux meilleurs scores par nom :

Pour relever ce défi, une requête plus complexe est nécessaire. Voici un exemple de la façon de sélectionner les deux meilleurs scores pour chaque nom dans le tableau fourni :

SELECT *
FROM   test s
WHERE 
        (
            SELECT  COUNT(*) 
            FROM    test  f
            WHERE f.name = s.name AND 
                  f.score >= s.score
        ) <= 2;

Explication :

  • La requête externe (SELECT * ...) récupère toutes les lignes de la table de test.
  • La sous-requête (SELECT COUNT(*) ...) détermine le nombre d'enregistrements existants pour chaque nom de la table de test avec un score égal ou supérieur au score de la ligne actuelle.
  • La clause WHERE filtre ensuite les lignes de la requête externe en garantissant que le nombre de la sous-requête est inférieur ou égal à 2.

Exemple de résultat :

La requête ci-dessus renvoie ce qui suit sortie :

NAME    SCORE
-----------------
willy       2
willy       3
zoe         5
zoe         6

Cette sortie inclut les deux meilleurs scores pour chaque nom dans le tableau, comme demandé.

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