首页 > 解决方案 > MySQL:为什么这两个是错的?(组函数使用无效,使用have()后什么都不选)

问题描述

Credit:Leetcode_1076.Project Employees II 这里是样例表 Project 表:

 project_id  | employee_id 

 1           | 1           
 1           | 2           
 1           | 3           
 2           | 1           
 2           | 4           

(project_id, employee_id) 是这个表的主键。

我尝试了几种方法,并通过使用 dense_rank() 设法找到了正确的方法;但是,我仍然不明白为什么这两种语法选择员工人数最多的project_id是错误的:

1.返回null:{“headers”:[“project_id”,“n”],“values”:[]}

select project_id, count(*) as n
from project
group by project_id
having max(n)

2.错误:组功能使用无效

SELECT project_id, max(count(*)) as n
from project 
group by project_id

如果有人能帮助我,真的很感激!!

标签: mysqlsqlgroup-byhaving-clause

解决方案


使用order bylimit

select project_id, count(*) as n
from project
group by project_id
order by n desc
limit 1;

如果要处理关系,请使用窗口函数:

select p.*
from (select project_id, count(*) as n,
             rank() over (order by count(*) desc) as seqnum
      from project
      group by project_id
     ) p
where seqnum = 1;

推荐阅读