Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Намерете максимална стойност и покажете съответната стойност от различно поле в SQL сървър

Има няколко начина, по които това може да стане:

Филтър в WHERE клауза:

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

Или подзаявка:

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

Или можете да използвате TOP WITH TIES . Ако не може да има връзки, тогава можете да премахнете with ties . Това ще включва всички редове, които имат същата стойност на населението:

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

Тъй като използвате SQL Server, можете също да използвате функции за класиране, за да получите резултата:

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

Вижте SQL Fiddle с демонстрация на всички.

Като странична бележка относно функцията за класиране, може да искате да използвате dense_rank() вместо row_number() . Тогава в случай, че имате повече от един град със същото население, ще получите имената на двата града. (Вижте демонстрация)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да изберете само първите редове за всяка уникална стойност на колона?

  2. Как да ИЗБЕРЕТЕ ОТ съхранената процедура

  3. Групирана конкатенация в SQL Server

  4. Използвайте sys.trigger_event_types, за да изброите типовете тригерни събития в SQL Server

  5. В реферираната таблица няма първични или кандидат-ключове, които да съответстват на списъка с референтни колони във външния ключ