2011-12-06 2 views
1

a와 기존 쿼리에 대한 카운트가 금액을 팽창에 가입하고 계산 기능 :추가 내가 올바르게 작동이 작업 쿼리가 출력

select problems.problem_id , problem_title , sum(vote) as totalVotes 
from problems 
left join problem_votes on 
problems.problem_id = problem_votes.problem_id 
left join problem_categories on 
problems.problem_id = problem_categories.problem_id 
where problem_categories.category_id = 1 GROUP BY problem_title; 

내가 다른를 추가 suggested_solutions 테이블에 가입 합 (column_in_suggested_solutions_table를) 문제에 대해 얼마나 많은 제안 된 솔루션을보고, 쿼리는 다음과 같습니다

select problems.problem_id , problem_title , sum(vote) as totalVotes , count(solution_name) from problems 
left join problem_votes on 
problems.problem_id = problem_votes.problem_id 
left join problem_categories on 
problems.problem_id = problem_categories.problem_id 
left join suggested_solutions on 
problems.problem_id = suggested_solutions.problem_id 
where problem_categories.category_id = 1 GROUP BY problem_title; 

두 번째 쿼리가있는 문제는 여전히 같은 수의 행, 원래의 합() 함수가 반환을 반환하면서 부풀린 숫자, suggested_solutions에 대한 count 함수는 또한 부풀린 숫자를 반환합니다.

내가 여기 잘못 생각한가요?

감사합니다.

답변

3

특정 problem_id에 대해 suggested_solutions 행이 여러 개 있습니다. 이는 원래 쿼리에서 합산 ​​된 행이 비정상적으로 증가한다는 것을 의미합니다.

파생 테이블에서 group by을 수행하고 그 대신에 참여할 수 있습니다. 또한 WHERE problem_categories.category_id = 1 완전히 일이, INNER JOIN

+0

냉각 problem_votesproblems 사이의 첫 번째 LEFT JOIN 변환

SELECT problems.problem_id, problem_title, SUM(vote) AS totalVotes, Solution_Count FROM problems LEFT JOIN problem_votes ON problems.problem_id = problem_votes.problem_id LEFT JOIN problem_categories ON problems.problem_id = problem_categories.problem_id LEFT JOIN (SELECT COUNT(solution_name) AS Solution_Count, problem_id FROM suggested_solutions GROUP BY problem_id) ss ON problems.problem_id = ss.problem_id WHERE problem_categories.category_id = 1 GROUP BY problem_title; 

주의! 고맙습니다. – GeekedOut

관련 문제