2017-01-20 6 views
0

나는 코딩에 익숙하지 않고이를 파악하려고 노력하고 있지만, 불행히도 나는별로 운이 없다. MySQL을 사용하여 두 테이블 (호출 및 작업)이 있고 두 테이블의 열을 표시하려고합니다. 하나의 열 (점수 - number_id로 그룹화)의 값 그룹 평균을 가져와 점수가 5보다 작은 경우에만 각 number_id의 평균 점수를 표시해야합니다.열의 숫자 그룹 평균을 얻으려면 어떻게합니까? "오류 1111 : 그룹 기능의 사용이 잘못되었습니다."

이것은 코드입니다. 순간, 그러나 나는 오류 (1111) 점점 계속 : 그룹 함수의 잘못된 사용 : 나는 WHERE 절을하지 않는 경우

SELECT job.id, job.number, job.number_id, COUNT(job.id) AS 'test_count', 
AVG(calls.score) AS 'score_avg' 
FROM job LEFT JOIN calls ON job.id = calls.job_id 
WHERE AVG(calls.score) > 5 
GROUP BY job.number_id; 

내가 평균값을 표시 할 수 있습니다,하지만 난 적은 값을 얻을려고하면 5보다 큰 경우, MySQL은 위의 오류를 반환합니다. 모든 조언을 많이 주시면 감사하겠습니다.

이 평균값은 새 테이블에 삽입 될 예정입니다. 위 쿼리가 작동하는 방법을 파악한 후에 INSERT 문으로 조정할 수 있다고 가정합니다. 나는 그것을 생각하는 것이 맞습니까?

감사합니다.

+1

WHERE 대신 'HAVING AVG (calls.score)> 5'입니다. – jarlh

+0

쿼리에서보다 작음 대신> 기호를 사용하고 있습니다. @ Beany01 – Bunion

답변

1

Where 절을 사용하여 행을 필터링합니다. 그룹

SELECT job.id, 
     job.number, 
     job.number_id, 
     Count(job.id) AS 'test_count', 
     Avg(calls.score) AS 'score_avg' 
FROM job 
     LEFT JOIN calls 
       ON job.id = calls.job_id 
GROUP BY job.number_id 
HAVING Avg(calls.score) > 5 

를 필터링 할 수 HAVING 절을 사용 또는 당신은 파생 테이블이 필요하고 평균 한 번에 하나의 행에 적용되는 WHERE 절에보다 큰 5

SELECT * 
FROM (SELECT job.id, 
       job.number, 
       job.number_id, 
       Count(job.id) AS 'test_count', 
       Avg(calls.score) AS 'score_avg' 
     FROM job 
       LEFT JOIN calls 
         ON job.id = calls.job_id 
     GROUP BY job.number_id) a 
WHERE score_avg > 5 
0

식이다 점수를 필터링 할 수 있습니다. WHERE 절에 그룹에 관해 말할 수 없습니다.

HAVING에있는 표현식은 한 번에 하나의 전체 그룹에 적용됩니다. 그룹을 포함시킬 조건을 지정하기 전에 그룹을 정의해야합니다.

따라서 그룹 단위 함수 AVG()HAVING 절에서만 사용할 수 있습니다.