Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Trova il valore massimo e mostra il valore corrispondente da un campo diverso nel server SQL

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)