我有一张表格,里面有关于城市的数据,包括他们的姓名,人口以及与我的问题无关的其他字段.
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()
.然后,如果您拥有多个具有相同人口的城市,您将获得两个城市名称.(见演示)
归档时间: |
|
查看次数: |
58164 次 |
最近记录: |