Ci sono diversi modi per farlo:
Un filtro nel WHERE
clausola:
select id, name, population
from yourtable
where population in (select max(population)
from yourtable)
O una sottoquery:
select id, name, population
from yourtable t1
inner join
(
select max(population) MaxPop
from yourtable
) t2
on t1.population = t2.maxpop;
Oppure puoi usare TOP WITH TIES
. Se non ci possono essere pareggi, puoi rimuovere il with ties
. Ciò includerà tutte le righe che hanno lo stesso valore di popolazione:
select top 1 with ties id, name, population
from yourtable
order by population desc
Poiché stai utilizzando SQL Server, puoi anche utilizzare le funzioni di classificazione per ottenere il risultato:
select id, name, population
from
(
select id, name, population,
row_number() over(order by population desc) rn
from yourtable
) src
where rn = 1
Vedi SQL Fiddle con demo di tutti.
Come nota a margine sulla funzione di classificazione, potresti voler usare dense_rank()
invece di row_number()
. Quindi, nel caso in cui tu abbia più di una città con la stessa popolazione, otterrai entrambi i nomi di città. (Vedi demo)