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

为何查询员工最多项目的第一条SQL语句失效,第二条正常执行?

问题梳理

现有Project数据表

Project_idEmployee_id
11
12
21

需求

编写SQL查询所有员工数量最多的项目,预期结果:

Project_id
1

待分析的两条SQL语句

-- 第一条SQL
select temp.project_id from(
    select project_id, count(distinct employee_id)  
    from Project  
    group by project_id  
    order by count(distinct employee_id) desc  
)temp limit 1

-- 第二条SQL
select project_id from Project
group by project_id
having count(project_id)=  
    (select count(project_id) from Project   
     group by Project_id   
     order by count(project_id) desc   
     limit 1)

问题分析

第一条SQL无法得到正确结果的原因

  1. 核心问题:无法返回所有符合条件的项目
    子查询对项目按员工数降序排序后用limit 1,只能返回排名第一的单个项目。如果存在多个项目员工数并列最大值的情况(比如有两个项目都有2个员工),这条SQL会直接漏掉其他符合条件的项目,不符合“找出所有员工数量最多的项目”的需求。
  2. 次要问题:统计逻辑冗余+不规范写法
    当前数据表中同一个项目下没有重复的Employee_id,count(distinct employee_id)完全没必要,用count(employee_id)或者count(*)结果一样;另外子查询里的统计字段没起别名,虽然部分数据库能兼容运行,但这不是标准的SQL写法。

第二条SQL能正常执行的原因

  1. 逻辑匹配需求:覆盖所有最大值项目
    子查询先统计每个项目的员工数,排序后取最大值,主查询通过having子句筛选出所有员工数等于这个最大值的项目。不管有多少个项目并列员工数第一,都能全部返回,完全符合需求。
  2. 统计逻辑正确
    count(project_id)用来统计每个项目的记录数,而每条记录对应一个员工,所以这个统计结果就是项目的员工数,和需求要统计的指标完全匹配。

内容的提问来源于stack exchange,提问作者Jennie

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 04:54:16