2012-10-09 51 views
-1

我一直在處理這個問題一段時間,我似乎無法找到有效實現此目的的方法。在另一個表格中選擇並計數記錄的查詢

基本上我有一張表格,裏面有問題,我有一張表格跟蹤問題的答案以及與該答案關聯的用戶的用戶信息。答案都是真的或假,我想跟蹤每個問題的真實答案或錯誤答案。

因此,第一個查詢是選擇問題表中的所有記錄。 第二個查詢通過questionID

選擇答案

我想創建一個查詢,同時做這一切,我所最近沒有成功嘗試如下:

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 
) 

這個查詢沒有按」 t工作,因爲我不能做另一個WHERE語句,指定我只想用答案抓住記錄爲1或0(真或假答案都是二進制)。我還沒有找到一個THIS選擇器或任何類似的SQL。我希望我已經清楚了。我認爲我對查詢有很好的理解,直到遇到這個問題。

任何幫助,將不勝感激

+0

至少讓我們看到您的模型,因爲您的查詢是完全錯誤的。 (選擇答案。* ....)答案指的是什麼?你也沒有解釋什麼存儲在「投票」表中。 – Rikki

+0

我在重命名錶時失敗了。我試圖儘可能地讓它變得有意義,我忘了改變投票的答案。 – Malarky44

回答

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 
+0

我使用了你的兩個幫助,並得到它的工作。非常感謝! – Malarky44

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 
相關問題