2017-02-09 2 views
2

경고 빈 집합을 반환 절을 한 후 : 나는 this 질문 알고있다 - 내 쿼리에 GROUP BY 조항을 추가하고 여전히 작동하지 않기 때문에 그것은 내 같은 하지입니다.집계 기능


나는 임시 열 project_count의 최대 값을 선택해야합니다. 내가합니다 (HAVING 절을 포함 할 경우 내가해야하는, 그러나

+-------------+---------------+ 
| employee_id | project_count | 
+-------------+---------------+ 
|   1 |    2 | 
|   2 |    1 | 
|   3 |    3 | 
|   5 |    1 | 
+-------------+---------------+ 

: 나는 HAVING 절을 제거하면 출력은 다음과 같다

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); 

:

쿼리입니다 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

그룹화에는 두 개의 "레이어"가 있지만 하나만 지정합니다. MAX (project_count)는 employee_id로 그룹화 된 MAX (COUNT (*))와 동일하다는 것을 기억하십시오. 나는 MySQL이 쿼리를 거부하지 않았다는 것에 놀랐다. 그것을 받아 들일 때 모든 행 대신에 행을 반환하기로 결정했다는 사실을 알게되었습니다. – Uueerdo

답변

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 
     )