如何在单查询中找出人口最多的城市?无需临时表的实现方案
不用临时表,单条查询找出人口最多城市的几种方法
当然可以!完全不需要临时表,用单条SQL就能轻松实现需求,这里给你整理几个简洁实用的写法,适配不同场景:
1. 窗口函数法(灵活应对并列情况)
这是最推荐的写法之一,尤其是当存在多个城市人口并列第一时,能精准返回所有符合条件的记录。我们可以用RANK()或ROW_NUMBER()窗口函数:
SELECT city_name, population FROM ( SELECT city_name, population, -- RANK()会保留并列排名,比如两个第一都显示rank_num=1 RANK() OVER(ORDER BY population DESC) AS rank_num FROM cities ) ranked_cities WHERE rank_num = 1;
如果你的需求是即使有并列也只返回一条(比如随机选一个),把RANK()换成ROW_NUMBER()即可。
2. 子查询关联法(最简洁直观)
先通过子查询找出最大人口数,再关联原表匹配对应城市,写法非常简洁,性能也很出色:
SELECT city_name, population FROM cities WHERE population = (SELECT MAX(population) FROM cities);
这个方法逻辑清晰,数据库优化器通常会自动优化查询计划,适合大多数常规场景。
3. TOP/LIMIT 专属语法(快速取单条结果)
如果你的需求只是获取任意一个人口最多的城市(不关心并列情况),可以用各数据库的专属语法,写法更短:
- MySQL/PostgreSQL/SQLite:
SELECT city_name, population FROM cities ORDER BY population DESC LIMIT 1;
- SQL Server:
SELECT TOP 1 city_name, population FROM cities ORDER BY population DESC;
- Oracle:
SELECT city_name, population FROM cities ORDER BY population DESC FETCH FIRST 1 ROW ONLY;
⚠️ 注意:这种写法在有多个城市人口相同时,只会返回其中一条,所以如果需要所有并列第一的记录,优先选前两种方法。
内容的提问来源于stack exchange,提问作者A.B.
相关产品推荐
相关产品推荐

