1

私は 1 つの問題を解決し、別の問題に遭遇しました。基本的に、質問ID、回答、最大出現数を選択したいです。質問と回答を収集する基本テーブルからクエリを実行します (質問 ID は質問を表し、回答は他のテーブルに対応する 0 から 5 までの回答を表しますが、それは問題ではありません)。

**survey_result**
question_id
answer (int from 0 to 5)

サンプルの調査結果:

question_id answer
1           3
1           5
1           2
2           2
2           0
2           4

これがクエリです。その目的は、すべての質問について、どの回答 (0 から 5 まで) が最も多く発生したかを確認することです。

select question_id, answer, max(occurence_number) FROM
(select question_id, answer, count(*) as occurence_number
from survey_result
group by question_id, answer
order by question_id asc, occurence_number desc) as results
GROUP BY question_id

したがって、サブクエリの結果は次のようになります。

question_id answer occurence_number
1           0      12
1           1      20
1           2      34
1           3      5
1           4      9
1           5      15

しかし、主なクエリの結果は次のようになります。

question_id answer occurence_number
1           0      12
2           0      20
3           0      34
4           0      5

だから問題は、それが常に答え0を示しているということであり、私は正解数を取得したい.

4

2 に答える 2

2

悲しいことに、MySQL にはステートメントがないため、少し冗長ですWITHが、これで目的が達成されるはずです。同点の場合は、高い方の回答を返します。

SELECT s1.question_id, MAX(s1.answer) answer, MAX(s1.c) occurrences
FROM
   (SELECT question_id, answer, COUNT(*) c 
    FROM survey_result GROUP BY question_id,answer) s1
LEFT JOIN
   (SELECT question_id, answer, COUNT(*) c
    FROM survey_result GROUP BY question_id,answer) s2
  ON s1.question_id=s2.question_id
 AND s1.c < s2.c
WHERE s2.c IS NULL
GROUP BY question_id

で遊ぶ SQLfiddle

于 2013-02-02T16:07:23.190 に答える
0

私はあなたがそれを過度に複雑にしていると思います、これを試してください:

select question_id, answer, count(*) as occurence_number
from survey_result
group by question_id, answer
于 2013-02-02T15:59:29.640 に答える