sql >> Database >  >> RDS >> Mysql

MySQL-werelddatabase Proberen subquery te vermijden

Dit is het "grootste-n-per-groep"-probleem dat vaak voorkomt op 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;

Uitleg:doe een join op zoek naar een land c2 dat hetzelfde continent en een grotere bevolking heeft. Als u er geen kunt vinden (wat wordt aangegeven door de outer join die NULL retourneert voor alle kolommen van c2 ) dan c1 moet het land zijn met de hoogste bevolking op dat continent.

Merk op dat dit meer dan één land per continent kan vinden, als er een gelijkspel is voor de #1 positie. Met andere woorden, er kunnen twee landen zijn waarvoor geen derde land bestaat met een grotere bevolking.




  1. De uitdaging zit erop! Community-oproep voor het maken van de snelste nummerreeksgenerator

  2. Tekst of numeriek veld - Een eenvoudige SQL-methode om van gegevenstype te wisselen

  3. Dynamische query in MySQL

  4. Hoe gebruik je een BIGINT als een automatisch oplopende primaire sleutel in Laravel 4