Maison > base de données > tutoriel mysql > Comment récupérer les deux meilleurs scores de chaque groupe en SQL ?

Comment récupérer les deux meilleurs scores de chaque groupe en SQL ?

Barbara Streisand
Libérer: 2025-01-03 05:21:37
original
833 Les gens l'ont consulté

How to Retrieve the Top Two Scores for Each Group in SQL?

Récupérer les deux meilleurs scores pour des groupes individuels en SQL

Dans une base de données relationnelle, l'extraction de données significatives à partir de grands ensembles de données implique souvent de regrouper des enregistrements en fonction sur des caractéristiques spécifiques. Lors de la récupération de données à partir d'ensembles groupés, il est courant d'obtenir les valeurs les plus élevées ou les plus basses au sein de chaque groupe à l'aide de fonctions d'agrégation. Cependant, que se passe-t-il si vous devez sélectionner les N premières lignes pour chaque groupe ?

Considérez le tableau suivant avec les noms des étudiants et leurs scores correspondants :

NAME SCORE
willy 1
willy 2
willy 3
zoe 4
zoe 5
zoe 6

La fonction d'agrégation pour le regroupement permet uniquement vous d'obtenir le score le plus élevé pour chaque nom. Pour récupérer les deux meilleurs scores de chaque élève, une approche différente est nécessaire.

La requête suivante y parvient en utilisant une sous-requête pour suivre le classement des scores de chaque élève au sein de leurs groupes respectifs :

SELECT *
FROM test s
WHERE 
        (
            SELECT COUNT(*) 
            FROM test f
            WHERE f.name = s.name AND 
                  f.score >= s.score
        ) <= 2
Copier après la connexion

Décomposition de la requête :

  • La requête externe, SELECT * FROM test s, récupère tous lignes de la table de test et les alias s.
  • La sous-requête, entre parenthèses, calcule le rang du score de chaque élève :

    • SELECT COUNT(*) FROM test f : Cette partie compte le nombre de lignes dans la table de test où le nom (f.name) correspond au nom de la ligne actuelle (s.name) et le score (f.score) est supérieur ou égal au score de la ligne actuelle (s.score).
  • La clause WHERE applique un filtre à la requête externe, en sélectionnant uniquement ces lignes dont le rang (tel que déterminé par la sous-requête) est inférieur ou égal à 2.

Sortie :

L'exécution de cette requête renverra les résultats suivants :

NAME SCORE
willy 2
willy 3
zoe 5
zoe 6

Cette requête récupère efficacement les deux premiers scores pour chaque élève, offrant une vue plus complète de leurs performances par rapport à l'utilisation d'une simple agrégation MAX().

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