查找最大值并在SQL Server中显示来自不同字段的相应值

HDu*_*unn 22 sql-server max

我有一张表格,里面有关于城市的数据,包括他们的姓名,人口以及与我的问题无关的其他字段.

ID      Name    Population
1       A       45667   
2       B       123456  
3       C       3005    
4       D       13769   
Run Code Online (Sandbox Code Playgroud)

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

Population      Name    
123456          B       
Run Code Online (Sandbox Code Playgroud)

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

Tar*_*ryn 34

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

WHERE条款中的过滤器:

select id, name, population
from yourtable
where population in (select max(population)
                     from yourtable)
Run Code Online (Sandbox Code Playgroud)

或子查询:

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

或者你可以使用TOP WITH TIES.如果没有联系,那么你可以删除with ties.这将包括具有相同人口值的任何行:

select top 1 with ties id, name, population
from yourtable
order by population desc
Run Code Online (Sandbox Code Playgroud)

由于您使用的是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
Run Code Online (Sandbox Code Playgroud)

请参阅SQL Fiddle with Demo of all.

作为排名功能的旁注,您可能希望使用dense_rank()而不是row_number().然后,如果您拥有多个具有相同人口的城市,您将获得两个城市名称.(见演示)

  • @HDunn欢迎您,我想向您展示几个工作版本.:) (4认同)
  • "按...排序限制1"是一个简单而好的想法,有时候不会想到:) (2认同)