Mysql
 sql >> Base de données >  >> RDS >> Mysql

Base de données mondiale MySQL Essayer d'éviter les sous-requêtes

Il s'agit du problème "plus grand-n-par-groupe" qui revient fréquemment sur StackOverflow.

SELECT c1.Continent, c1.Name
FROM Country c1
LEFT OUTER JOIN Country c2
  ON (c1.continent = c2.continent AND c1.Population < c2.Population)
WHERE c2.continent IS NULL;

Explication :faire une jointure en recherchant un pays c2 qui a le même continent et une plus grande population. Si vous n'en trouvez pas (ce qui est indiqué par la jointure externe renvoyant NULL pour toutes les colonnes de c2 ) puis c1 doit être le pays le plus peuplé de ce continent.

Notez que cela peut trouver plus d'un pays par continent, s'il y a égalité pour la position #1. En d'autres termes, il pourrait y avoir deux pays pour lesquels aucun pays tiers n'existe avec une plus grande population.