2

私はこのようなテーブルを持っています:

CREATE TABLE IF NOT EXISTS `answered` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `question_id` int(11) NOT NULL,
  `correct` tinyint(1) NOT NULL DEFAULT '0',
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
);

CREATE TABLE IF NOT EXISTS `questions` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `created` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
);

正解と不正解の数を選択する必要がありますが、同じ質問に複数の回答があった場合(同じquestion_idで「answered」にさらにエントリがある場合があります)、最新の(「answered.created」で決定)のみがカウントされます。

結果の構造は次のようになります。

correct  count 
  0        1 
  1        3 

フィドル: http ://sqlfiddle.com/#!2/11073

私の試用版:

SELECT a.correct, count(*) as count
FROM answered a 
JOIN questions q ON a.question_id = q.id 
GROUP BY correct

これは機能しますが、同じquestion_idsを複数回カウントします。

4

2 に答える 2

0

これを試して:

SELECT Correct, count(*) as count
FROM questions q
JOIN (select question_id, max(created) as 'MaxCreated' from answered group by question_id) a 
ON a.question_id = q.id 
JOIN answered t1 on a.question_id = t1.question_id and  a.MaxCreated = t1.Created
GROUP BY correct

おそらくもっと良いオプションがあります(日付で参加するのは好きではありません。日付が繰り返される場合はどうなりますか?)しかし、それはあなたが望むものを与えると思います(つまり、最大の日付が必要な場合は、繰り返すべきではありませんでした日付)

于 2012-07-24T12:36:56.437 に答える
-1

カーソルなしでそれを行う方法はないと思います。なぜなら、各質問に0個以上の回答がある場合は評価し、複数の回答がある場合は最新のものを取得したいからです。つまり、各 Question_id でやり​​取りしたい。

このコードをチェックしてください: http://dev.mysql.com/doc/refman/5.0/en/cursors.html

各質問 Id に対して、最新の回答が正しいかどうかを確認し、Right 変数と Wrong 変数を追加します。

于 2012-07-24T10:52:12.347 に答える