如何编写含COUNT与MAX函数的SQL查询获取人口最多城市及人数
获取员工数量最多的地区(国家/城市)及其对应人数的SQL查询方案
你之前尝试的Select Country, MAX(COUNT(EmployeeID)) from Employees group by Country之所以失败,是因为SQL不允许在同一个SELECT层级中嵌套使用聚合函数(COUNT和MAX都是聚合函数),这种写法违反了语法规则。
补充说明
注意到你描述中提到“获取人口最多的城市”,但原查询语句是按国家分组,推测可能是笔误。以下方案默认以员工数量最多的国家为例,若实际需求是城市,只需将语句中的Country替换为City即可。
方案1:使用ORDER BY + LIMIT(适用于MySQL、PostgreSQL等)
这种方式最简单直接,适合只需要返回单个结果(即使有并列最多的情况也只取一个)的场景:
SELECT Country, COUNT(EmployeeID) AS EmployeeCount FROM Employees GROUP BY Country ORDER BY EmployeeCount DESC LIMIT 1;
方案2:使用窗口函数(适用于支持窗口函数的数据库,如MySQL 8+、SQL Server、PostgreSQL等)
如果需要返回所有员工数量并列最多的国家,推荐用窗口函数:
SELECT Country, EmployeeCount FROM ( SELECT Country, COUNT(EmployeeID) AS EmployeeCount, RANK() OVER(ORDER BY COUNT(EmployeeID) DESC) AS rank_num FROM Employees GROUP BY Country ) AS ranked_countries WHERE rank_num = 1;
- 用
RANK()会保留并列排名,比如两个国家都是最多,都会被返回;如果用ROW_NUMBER()则只会随机返回其中一个,根据需求选择即可。
方案3:使用子查询筛选最大值(通用兼容方案)
这种写法几乎兼容所有SQL数据库,也能返回所有并列最多的结果:
SELECT Country, COUNT(EmployeeID) AS EmployeeCount FROM Employees GROUP BY Country HAVING COUNT(EmployeeID) = ( SELECT MAX(emp_count) FROM ( SELECT COUNT(EmployeeID) AS emp_count FROM Employees GROUP BY Country ) AS country_counts );
内容的提问来源于stack exchange,提问作者khalannz7
相关产品推荐
相关产品推荐

