sql >> Database >  >> RDS >> Sqlserver

Zoek de maximale waarde en toon de bijbehorende waarde uit een ander veld in SQL-server

Dit kan op verschillende manieren:

Een filter in de WHERE clausule:

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

Of een subquery:

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

Of je kunt TOP WITH TIES . gebruiken . Als er geen banden kunnen zijn, dan kunt u de with ties . verwijderen . Dit omvat alle rijen die dezelfde populatiewaarde hebben:

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

Aangezien u SQL Server gebruikt, kunt u ook rangschikkingsfuncties gebruiken om het resultaat te krijgen:

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

Zie SQL Fiddle met demo van alles.

Als een kanttekening bij de rangschikkingsfunctie, wil je misschien dense_rank() . gebruiken in plaats van row_number() . In het geval dat u meer dan één stad met dezelfde bevolking heeft, krijgt u beide stadsnamen. (Zie demo)




  1. SQLite-vallen en valkuilen

  2. Recursieve zoekopdracht in Oracle

  3. Zet automatische sleutelgeneratie in de slaapstand met MySQL en Oracle

  4. Sql*plus retourneert altijd exit-code 0?