0

「agent_id」を指定すると、エージェントが評価中に回答した質問のリストと、エージェントが回答したすべての時間の平均スコアを取得する (Oracle) SQL クエリを作成しようとしています。それらの質問。

注: 複数の従業員をサポートするように (店舗レベルでクエリを実行できるように) クエリを設計しようとしたため、where 句に "IN" 条件が含まれています。

これが私がこれまでに持っているものです:

select question.question_id as questionId, 
       ((sum(answer.answer) / count(answer.answer)) * 100) as avgScore
  from SPMADMIN.SPM_QC_ASSESSMENT_ANSWER answer
  join SPMADMIN.SPM_QC_QUESTION question 
    on answer.question_id = question.question_id
  join SPMADMIN.SPM_QC_ASSESSMENT assessment 
    on answer.assessment_id = assessment.assessment_id
  join SPMADMIN.SPM_QC_SUB_GROUP_TYPE sub_group 
    on question.sub_group_type_id = sub_group.sub_group_id
  join SPMADMIN.SPM_QC_GROUP_TYPE theGroup 
    on sub_group.group_id = theGroup.group_id
 where question.question_id in (select distinct question2.question_id 
                                  from SPMADMIN.SPM_QC_QUESTION question2
                               )
   and question.bool_yn_active_flag = 'Y'
   and assessment.agent_id in (?)
   and answer.answer is not null
order by theGroup.page_order asc, 
         sub_group.group_order asc, 
         question.sub_group_order asc

基本的に私は見たいと思います:

|questionId|avgScore|
|     1    |   100  |
|     2    |   50   |
|     3    |   75   |

従業員がこれまでに回答したすべての質問は、回答したすべての時間の平均スコアとともに質問インデックスのリストに含まれます。

そのまま実行すると、「ORA-00937: 単一グループのグループ関数ではありません」というエラーが表示されます。私が追加した「group by」句の組み合わせは、まったく役に立ちませんでした。

question.question_id as questionId,選択の一部を削除して実行すると、正常に実行されますが、すべての質問の平均スコアが表示されます。質問ごとに分類する必要があります。

どんな助けや指針も大歓迎です。

4

2 に答える 2

2

SELECT リストに集計関数がある場合 (SUM と COUNT は集計関数です)、SELECT リストの他の列は GROUP BY 句に含める必要があります。例えば:

SELECT fi, COUNT(fo)
  FROM fum
 GROUP BY fi

COUNT(fo)式は集計ですが、列fiは非集計です。別の非集計を SELECT リストに追加する場合は、それも GROUP BY に含める必要があります。例えば

SELECT TRUNC(fee), fi, COUNT(fo)
  FROM fum
 GROUP BY TRUNC(fee), fi

もう少し正確に言うと、「SELECT リスト内の列」と言うよりも、実際には「SELECT リスト内のすべての非集計式」を GROUP BY 句に含める必要があると言うべきです。

于 2012-05-16T21:34:28.373 に答える
1

それはあなたの結合ではなく、あなたの使用ですGROUP BY.

GROUP BYSQL でa を使用するGROUP BYと、グループを定義するものになります。あなたが持っている他のすべてはSELECT、グループを操作する集合体でなければなりません。

なしでセット全体を集計することもできますがGROUP BY、その場合、すべての列が集計関数内にある必要があります。

于 2012-05-16T21:13:45.283 に答える