使用MAX()聚合函数时如何仅返回人口最高的单条县数据
问题原因
你原来的SQL语句中使用了GROUP BY Name,数据库会先将全表数据按县名Name进行分组,再针对每个分组单独计算最大人口,最终自然会返回每个县对应的最大人口记录,和你要的全表全局最大值需求不符。
正确写法
这里提供两种常用方案,你可以根据使用的数据库类型和实际需求选择:
方案1:排序后取第一条
实现逻辑最简单,直接按人口倒序排序,取排在最前面的第一条记录即可:
- MySQL、PostgreSQL、SQLite 环境使用:
SELECT Name, Population FROM County ORDER BY Population DESC LIMIT 1;
- SQL Server、Access 环境使用:
SELECT TOP 1 Name, Population FROM County ORDER BY Population DESC;
- Oracle 环境使用:
SELECT Name, Population FROM County ORDER BY Population DESC FETCH FIRST 1 ROW ONLY;
注意:如果存在多个县人口同为全表最高值,该方案只会返回排序后匹配到的第一条记录。
方案2:子查询匹配全局最大值
完全符合SQL标准,兼容所有数据库,还可以返回所有人口等于全局最大值的县:
SELECT Name, Population FROM County WHERE Population = (SELECT MAX(Population) FROM County);
注意:如果存在多个县人口同为全表最高值,该方案会返回所有符合条件的记录。
内容的提问来源于stack exchange,提问作者nostrad0muz
相关产品推荐
相关产品推荐

