HAVING子句返回空集后的聚合函数

时间:2017-02-09 18:42:01

标签: mysql aggregate-functions

警告:我知道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 |
+-------------+---------------+

1 个答案:

答案 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
        )