You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写含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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 07:05:15