Mysql
 sql >> Database >  >> RDS >> Mysql

Database mondiale MySQL Cercando di evitare la sottoquery

Questo è il problema "più grande-n-per-gruppo" che si presenta frequentemente su 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;

Spiegazione:fai un join cercando un paese c2 che ha lo stesso continente e una popolazione maggiore. Se non riesci a trovarne uno (che è indicato dal join esterno che restituisce NULL per tutte le colonne di c2 ) quindi c1 deve essere il paese con la popolazione più alta in quel continente.

Nota che questo può trovare più di un paese per continente, se c'è un pareggio per la posizione n. In altre parole, potrebbero esserci due paesi per i quali non esiste un paese terzo con una popolazione maggiore.