-1

私はしばらくこの問題に取り組んできましたが、これを効果的に行う方法がわかりません。

基本的に、質問を保持するテーブルがあり、質問への回答とその回答に関連付けられているユーザーのユーザー情報を追跡するテーブルがあります。答えはすべて真または偽であり、各質問ごとに真または偽の回答の合計を追跡したいと考えています。

したがって、最初のクエリは、質問テーブル内のすべてのレコードを選択しています。2 番目のクエリは、質問 ID によって回答を選択します。

これらすべてを同時に実行するクエリを作成したいのですが、最近試したものの成功しなかったのは次のとおりです。

SELECT questions.*, count(answers.*) as total_answers FROM questions
LEFT OUTER JOIN
(
SELECT answers.* AS true FROM votes
WHERE answer = 1 AND questionID = THIS.ID
)

回答が 1 または 0 のレコードのみを取得するように指定する別の WHERE ステートメントを実行できないため、このクエリは機能しません (真または偽の回答はすべてバイナリです)。THIS セレクターまたは SQL で同様のものは見つかりませんでした。私は十分に明確であることを願っています。この問題に遭遇するまで、クエリについてかなりよく理解していると思っていました。

どんな助けでも大歓迎です

4

2 に答える 2

1

そのようなもの(あなたの構造は私にはあまり明確ではないので、適応させる必要があるかもしれません)

select 
  q.*, 
  count(a.*) as total_answers, 
  sum(case when a.answer = 1 then 1 else 0 end) as total_correct,
  sum(case when a.answer = 0 then 1 else 0 end) as total_false
FROM questions q
left join answers a on q.ID = a.questionID
group by q.ID
于 2012-10-09T22:08:52.380 に答える
1

ラファエルが言及した答えを参照すると、別の書き方があります。

Select  Question.*
,   Sum(TrueAnswer.answer)
+   Sum(FalseAnswer.answer)     As  total_answers
,   Sum(TrueAnswer.answer)      As  total_TrueAnswer
,   Sum(FalseAnswer.answer)     As  total_FalseAnswer
    From    questions       As  Question
    Left    Outer   Join
        answers         As  TrueAnswer
    On  Question.ID     =   TrueAnswer.questionID
    And TrueAnswer.answer   =   1
    Left    Outer   Join
        answers         As  FalseAnswer
    On  Question.ID         =   FalseAnswer.questionID
    And FalseAnswer.answer  =   0
    Group   by  Question.ID 
于 2012-10-09T22:20:23.160 に答える