Подтвердить что ты не робот

Найти максимальное значение и показать соответствующее значение из другого поля на SQL-сервере

У меня есть таблица с данными о городах, которая включает их имя, население и другие поля, не относящиеся к моему вопросу.

ID      Name    Population
1       A       45667   
2       B       123456  
3       C       3005    
4       D       13769   

Найти максимальное количество населения является базовым, но мне нужна результирующая таблица с максимальной совокупностью в одном столбце и соответствующее название города в другом столбце

Population      Name    
123456          B       

Я просмотрел похожие вопросы, но по некоторым причинам ответы выглядят слишком сложными. Есть ли способ написать запрос в 1 или 2 строках?

4b9b3361

Ответ 1

Существует несколько способов сделать это:

Фильтр в 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 with Demo для всех.

Как побочная заметка о функции ранжирования, вы можете использовать dense_rank() вместо row_number(). Тогда, если у вас есть более одного города с одинаковым населением, вы получите оба названия городов. (См. Демо-версия)