sql >> Databasteknik >  >> RDS >> Sqlserver

Hitta maxvärde och visa motsvarande värde från olika fält i SQL-servern

Det finns flera sätt att göra detta på:

Ett filter i WHERE klausul:

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

Eller en underfråga:

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

Eller så kan du använda TOPP MED SLIPS . Om det inte finns några kopplingar kan du ta bort med kopplingar . Detta kommer att inkludera alla rader som har samma populationsvärde:

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

Eftersom du använder SQL Server kan du även använda rankningsfunktioner för att få resultatet:

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

Se SQL Fiddle with Demo of all.

Som en sidoanteckning om rankningsfunktionen kanske du vill använda dense_rank() istället för row_number() . Om du sedan har mer än en stad med samma befolkning får du båda stadsnamnen. (Se Demo)




  1. Kontrollera flera kolumner för ett värde

  2. Fel vid utskrift av REFCURSOR-variabel som OUT-parameter i proceduren i Oracle 11g

  3. Kan inte använda UPDATE med OUTPUT-satsen när en trigger finns på bordet

  4. Grundläggande tabelluttryck, del 2 – Härledda tabeller, logiska överväganden