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)
- 我期待它 return {"headers": ["project_id", "n"], "values": [1,3]}.
2。错误:组函数使用无效
SELECT project_id, max(count(*)) as n
from project
group by project_id
如果有人能帮助我,我将不胜感激!!
使用order by
和limit
:
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
来源: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)
- 我期待它 return {"headers": ["project_id", "n"], "values": [1,3]}.
2。错误:组函数使用无效
SELECT project_id, max(count(*)) as n
from project
group by project_id
如果有人能帮助我,我将不胜感激!!
使用order by
和limit
:
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