MySQL:这两个为什么不对? (组函数使用无效,使用having()后什么都没有选择)

MySQL: Why are these two wrong? (Invalid use of group function, selected nothing after using having())

来源:Leetcode_1076.Project 员工 II 这是示例 table 项目 table:

 project_id  | employee_id 

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

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

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

1.Return 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

如果有人能帮助我,我将不胜感激!!

使用order bylimit:

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

如果你想处理平局,那么使用window函数:

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;

您的两种方法都存在一个共同问题,即您正试图在同一级别访问 SQL 中的聚合结果。您不能在 SQL.

中使用嵌套聚合函数(例如 max(count(1)))

你的SQL应该是这样的-

select t.project_id, max(t.n) from (select project_id, count(*) as n
from project
group by project_id) t;

SQL小提琴演示 - http://sqlfiddle.com/#!9/9c9b18/4