2017-02-09 14 views
2

WARNING空のセットを返すHAVING句の後に:私は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

http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple- sql-query – Strawberry

+0

グループ化には2つの「レイヤー」がありますが、グループ化は1つのみです。 MAX(project_count)はemployee_idでグループ化されたMAX(COUNT(*))と同じであることに注意してください。私はMySQLがクエリを拒否しなかったことに驚いています。それを受け入れたときには、すべての行の代わりに行を返さないことにしました。 – Uueerdo

答えて

4

あなたは最大数と1行のみが必要な場合、あなたは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 
     )