2017-01-20 4 views
0

私は比較的新しいコードを書いてこれを理解しようとしていますが、残念ながら私はあまり運がありません。 MySQLを使用して、2つのテーブル(呼び出しとジョブ)があり、両方のテーブルの列を表示したいとします。 1つの列(スコア - number_idでグループ化)から値のグループの平均を取得し、スコアが5未満の場合のみ、各number_idの平均スコアを表示する必要があります。列内の数字のグループの平均を取得するにはどうすればよいですか? 「エラー1111:グループ機能の無効な使用」

これはコードI現時点ではありますが、私はエラー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の代わりに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 

それとも、派生テーブルを必要とし、平均は一度に1行に適用されます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

式でスコアをフィルタ処理をフィルタリングするHAVING句を使用します。グループについては、WHERE句には何も言えません。

HAVINGの式は、一度に1つのグループ全体に適用されます。グループを含める条件を設定する前に、グループを定義する必要があります。

したがって、グループ単位の機能AVG()は、HAVING句でのみ使用できます。

関連する問題