30

我有一个包含城市数据的表格,其中包括与我的问题无关的名称、人口和其他字段。

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

要找到最大人口是基本的,但我需要一个结果表,其中一列中包含最大人口,另一列中包含相应城市的名称

Population      Name    
123456          B       

我看过类似的问题,但由于某种原因,答案看起来过于复杂。有没有办法用 1 行或 2 行编写查询?

4

1 回答 1

47

有几种方法可以做到这一点:

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(). 然后,如果您有多个城市具有相同的人口,您将获得两个城市名称。(见演示

于 2013-04-11T10:13:24.867 回答