Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL-Weltdatenbank Versuch, Unterabfrage zu vermeiden

Dies ist das „größte-n-pro-Gruppe“-Problem, das häufig bei StackOverflow auftritt.

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;

Erläuterung:Führen Sie einen Join durch und suchen Sie nach einem Land c2 das denselben Kontinent und eine größere Bevölkerung hat. Wenn Sie keinen finden können (was durch den äußeren Join angezeigt wird, der NULL für alle Spalten von c2 zurückgibt ) dann c1 muss das Land mit der höchsten Bevölkerung auf diesem Kontinent sein.

Beachten Sie, dass dies mehr als ein Land pro Kontinent finden kann, wenn es einen Gleichstand für die Position Nr. 1 gibt. Mit anderen Worten, es könnte zwei Länder geben, für die kein drittes Land mit einer größeren Bevölkerung existiert.