2011-12-06 13 views
1

と既存のクエリへのカウントが合計を膨張参加し、カウント機能:追加私は正常に動作するこの作業クエリ持っ出力

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; 

2番目のクエリでの問題は、それはまだ同じ数の行、オリジナルの合計()関数が返すを返しながら、膨らんだカウント数、a 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

関連する問題