Il existe plusieurs façons de procéder :
Un filtre dans le WHERE
clause :
select id, name, population
from yourtable
where population in (select max(population)
from yourtable)
Ou une sous-requête :
select id, name, population
from yourtable t1
inner join
(
select max(population) MaxPop
from yourtable
) t2
on t1.population = t2.maxpop;
Ou vous pouvez utiliser TOP WITH TIES
. S'il ne peut y avoir aucun lien, vous pouvez supprimer le with ties
. Cela inclura toutes les lignes qui ont la même valeur de population :
select top 1 with ties id, name, population
from yourtable
order by population desc
Puisque vous utilisez SQL Server, vous pouvez également utiliser des fonctions de classement pour obtenir le résultat :
select id, name, population
from
(
select id, name, population,
row_number() over(order by population desc) rn
from yourtable
) src
where rn = 1
Voir SQL Fiddle avec démo de tous.
En remarque sur la fonction de classement, vous pouvez utiliser dense_rank()
au lieu de row_number()
. Ensuite, si vous avez plus d'une ville avec la même population, vous obtiendrez les deux noms de ville. (Voir la démo)