Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Finden Sie den maximalen Wert und zeigen Sie den entsprechenden Wert aus einem anderen Feld im SQL-Server an

Dafür gibt es mehrere Möglichkeiten:

Ein Filter im WHERE Klausel:

select id, name, population
from yourtable
where population in (select max(population)
                     from yourtable)

Oder eine Unterabfrage:

select id, name, population
from yourtable t1
inner join
(
  select max(population) MaxPop
  from yourtable
) t2
  on t1.population = t2.maxpop;

Oder Sie können TOP WITH TIES verwenden . Wenn es keine Bindungen geben kann, können Sie den with ties entfernen . Dies schließt alle Zeilen ein, die denselben Populationswert haben:

select top 1 with ties id, name, population
from yourtable
order by population desc

Da Sie SQL Server verwenden, können Sie auch Ranking-Funktionen verwenden, um das Ergebnis zu erhalten:

select id, name, population
from
(
  select id, name, population,
    row_number() over(order by population desc) rn
  from yourtable
) src
where rn = 1

Siehe SQL Fiddle mit Demo von allen.

Als Randbemerkung zur Ranking-Funktion möchten Sie vielleicht dense_rank() verwenden statt row_number() . Falls Sie dann mehr als eine Stadt mit der gleichen Bevölkerung haben, erhalten Sie beide Städtenamen. (Siehe Demo)