サブクエリを設定しようとしていますが、集計/グループ化に問題があります。サブクエリは、平均値に基づいてカウントを選択します。ただし、 WHEREブロックにAVG(response) >= target
条件を設定すると、「グループ関数の無効な使用」エラーが発生します。サブクエリのHAVINGブロックに条件を配置するには、ターゲット変数が、のSELECTブロックにCOUNTを指定する必要があることを除き、演算子には1列が含まれている必要があります。クエリのコピーは以下のとおりです。MySQLネストされたクエリHAVINGフィールド
私はネストされたクエリと集合関数の両方に精通していますが、この特定の組み合わせは協力を拒否しています。 "比較のためにこのフィールドを選択する/ HAVINGを返すが、それを返さない"ためのキーワードが必要であるかのように思えるかもしれません。残念ながら、これはBIRTレポーティングソフトウェアによって実行されているので、(自分の知る限りでは)生データを取得して手動で集計することはできません。
クエリが(少しわかりやすくするために剪定)以下である:
SELECT
c.job_competency_id,
(
SELECT
COUNT(ar1.assessment_result_id)
FROM
recent_assessment AS ra1,
assessment_result AS ar1,
client_job_competency AS jc1
WHERE
ar1.assessment_id = a.assessment_id
AND ra1.assessment_id = ar1.assessment_id
AND ar1.job_competency_id = jc1.job_competency_id
AND ar1.job_competency_id = c.job_competency_id
AND AVG(ar1.response) >= jc1.target
GROUP BY jc1.job_competency_id
) AS n_meets
FROM
recent_assessment AS ra,
assessment AS a,
assessment_result AS ar,
client_job_competency AS jc,
job_competency AS c,
master_competency AS mc
WHERE
a.client_id = ?
AND ra.assessment_id = a.assessment_id
AND ar.assessment_id = a.assessment_id
AND c.job_competency_id = ar.job_competency_id
AND c.master_competency_id = mc.master_competency_id
AND jc.job_competency_id = c.job_competency_id;
それが重要場合には、代替サブクエリはここにある:
(
SELECT
COUNT(ar1.assessment_result_id),
jc1.target
FROM
recent_assessment AS ra1,
assessment_result AS ar1,
client_job_competency AS jc1
WHERE
ar1.assessment_id = a.assessment_id
AND ra1.assessment_id = ar1.assessment_id
AND ar1.job_competency_id = jc1.job_competency_id
AND ar1.job_competency_id = c.job_competency_id
GROUP BY jc1.job_competency_id
HAVING AVG(ar1.response) >= jc1.target
) AS n_meets
あなたがここまで読めば、撮影のためにあなたに感謝一見。明確化が必要なことがあれば教えてください。うまくいけば、私はちょうど骨折したミスをどこかにした。
これは相関サブクエリなので、常に1行を返す必要があります。なぜそれをフィルタリングするために 'HAVING'を使う必要がありますか? – Barmar