2012-10-09 8 views
-1

나는이 문제를 잠시 동안 다뤄 왔으며 실제로이 작업을 효과적으로 수행 할 수있는 방법을 찾지 못했습니다.다른 테이블의 레코드를 선택하여 계산하는 쿼리

기본적으로 나는 질문을 가지고있는 테이블을 가지고 있으며 그 질문에 대한 응답과 그 대답과 관련된 사용자의 사용자 정보를 추적하는 테이블을 가지고 있습니다. 대답은 모두 true 또는 false이고 각 질문 당 true 또는 false의 답변을 모두 추적하고자합니다.

첫 번째 쿼리는 질문 테이블의 모든 레코드를 선택합니다. 두 번째 쿼리는 다음과 같이 제가 가장 최근에 성공하지 시도하는 것은 내가 동시에이 모든 것을 수행하는 쿼리를 만들려면

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 
) 

나는 1 또는 0 (true 또는 false 답변은 모두 바이너리 임)으로 레코드를 가져 오도록 지정하는 다른 WHERE 문을 수행 할 수 없기 때문에 작업하지 않습니다. 나는이 selector 나 SQL과 비슷한 것을 발견하지 못했다. 나는 충분히 명확 해 졌으면 좋겠다. 나는이 문제를 다룰 때까지 Querying을 잘 이해하고 있다고 생각했습니다.

어떤 도움이 많이

을 감상 할 수있다
+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 
관련 문제