警告:我知道this问题 - 与我的不一样,因为我在查询中添加了GROUP BY
子句它仍然无法正常工作。
我需要选择临时列project_count
的最大值。
这是查询:
SELECT employee_id, COUNT(*) AS project_count FROM Employees WHERE project_level = 'L1' AND YEAR(Employees.project_date) = '2017' GROUP BY employee_id HAVING project_count = MAX(project_count);
如果我删除HAVING
子句,则输出如下:
+-------------+---------------+
| employee_id | project_count |
+-------------+---------------+
| 1 | 2 |
| 2 | 1 |
| 3 | 3 |
| 5 | 1 |
+-------------+---------------+
但是,如果我包含HAVING
子句(我需要使用它来知道project_count
的最大值),则输出为空集;但它应该如下:
+-------------+---------------+
| employee_id | project_count |
+-------------+---------------+
| 3 | 3 |
+-------------+---------------+
答案 0 :(得分:4)
如果您只想要一行具有最大数量,则可以使用limit
:
select employee_id, COUNT(*) as project_count
from Employees
where project_level = 'L1'
and YEAR(Employees.project_date) = 2017
group by employee_id
order by project_count desc limit 1
如果你想要所有人都有最大数量:
select employee_id, COUNT(*) as project_count
from Employees
where project_level = 'L1'
and YEAR(Employees.project_date) = 2017
group by employee_id
having COUNT(*) = (
select max(cnt)
from (
select COUNT(*) cnt
from Employees
where project_level = 'L1'
and YEAR(Employees.project_date) = 2017
group by employee_id
) t
)