Cet exemple montre comment identifier la personne la plus âgée de chaque groupe dans une table SQL, en tenant compte de l'ordre alphabétique pour résoudre les égalités. La structure du tableau comprend les colonnes « Personne », « Groupe » et « Âge » :
Exemple de tableau :
Person | Group | Age |
---|---|---|
Bob | 1 | 32 |
Jill | 1 | 34 |
Shawn | 1 | 42 |
Jake | 2 | 29 |
Paul | 2 | 36 |
Laura | 2 | 39 |
Objectif : Trouver la personne la plus âgée de chaque groupe, en priorisant par ordre alphabétique si les âges sont identiques.
Solution SQL :
<code class="language-sql">SELECT o.* FROM Persons o LEFT JOIN Persons b ON o.Group = b.Group AND (o.Age < b.Age OR (o.Age = b.Age AND o.Person > b.Person)) WHERE b.Person IS NULL;</code>
Explication :
Cette requête utilise un LEFT JOIN
pour comparer chaque personne (o
) avec toutes les autres personnes du même groupe (b
). La clause ON
filtre les lignes où :
o.Age < b.Age
: o
est plus jeune que b
(ce qui signifie que o
n'est pas le plus âgé).o.Age = b.Age AND o.Person > b.Person
: o
a le même âge que b
, mais par ordre alphabétique plus tard (ce qui signifie que o
n'est pas le plus âgé par ordre alphabétique).La clause WHERE b.Person IS NULL
filtre toutes les lignes de o
qui ont eu une correspondance dans b
, ne laissant que la personne la plus âgée (ou la première par ordre alphabétique en cas d'égalité) dans chaque groupe.
Exploration plus approfondie :
Pour une compréhension plus complète des techniques SQL avancées et des pièges potentiels, reportez-vous à des ressources telles que « SQL Antipatterns Volume 1 : Éviter les pièges de la programmation de bases de données. »
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!