2016-07-18 12 views
1

私は、予算列、プロジェクトID列、およびID列を含むテーブル "cats"を持っています。これに対する子供はテーブル "時計"で、cat_idとtotal_timeを含んでいます。MySQLテーブル1からSUMを選択し、結合されているSUMフォームテーブル2を選択します。

私はそれが一般的にすべてのインスタンスのための猫のテーブルのSUM値を複製するように私は、トラブルのJOINクエリで正しい合計を返すが生じています

とも

SELECT SUM(clocks.total_time) WHERE cats.id = clocks.cat_id 

に必要

JOINで見つかった時計のレコードの

クエリ例私は

SELECT a SUM(table1.column1), JOIN table2 WHERE table1.id = table2.cat_id, and SELECT SUM(table2.column2) 

感謝を試してみました!

+1

なぜあなたはmysql **と** sql-serverというタグを付けましたか? –

+0

@scsimon、私の謝罪、それは推奨タグのミスクリックしていた必要があります。私はそのタグを削除しようとします。 –

+0

心配はいりません。それは実際に気づいた@MarkRotteveelでした。 「提案されたタグ」は誤解を招くことがあります。 – scsimon

答えて

1

あなたは、内側あなたはすでに集計clocksテーブルにJOINに必要

select sum(cats.budget)/count(clocks.*), SUM(clocks.total_time) 
from cats 
inner join clocks on cats.id = clocks.cat_id 
where cats.project_id =1; 
+0

これは私の最初の試みでしたが、これは見つかったすべてのクロックレコードに対してSUM(cats.budget)のSUMを返します。つまり、4クロックのレコードが見つかった場合、SUM(cats.budget)が4回追加されます。 –

+0

答え...行数で割る..私に教えて.. – scaisEdge

0

に参加する必要があるようだ:

select t1.id, sum(t1.budget) as total_budget, t2.total_time 
from cats as t1 
inner join (
    select cat_id, SUM(total_time) as total_time 
    from clocks 
    group by cat_id) as t2 on t1.id = t2.cat_id 
where t1.project_id =1 
group by t1.id 

上記のクエリで使用される派生テーブルはtotal_timeSUMを返します。 cat_idあたり。クエリはMySQLで動作します。 SQL Serverの場合、group by句にt2.total_timeフィールドを追加する必要があります。

+0

ありがとう!これは私を非常に近づけましたが、私はまだクロックのSUMの違いを見る.total_time。私はクロックテーブルが親プロジェクトIDを持っているので、t1.proj_id = t2.proj_idに "group by proj_id"を代わりに使用するために、 "t1.id = t2.cat_idのt2として" cat_idによってグループを交換しました) –

+0

@nocc_ninjaサブクエリの 'project_id = 1'でフィルタリングして、フィルタリングする必要があります。 –

関連する問題