2012-04-08 15 views
1

私は多対多関係を持っており、特定の日付に作成されたAのすべてのWとその合計(頻度)を検索したいと思います。 これを行うにはどうすればよいですか?ある条件で多対多で合計を見つけるにはどうすればよいですか?

結果はませは次のようになります。

w.name | sum 
-------+------ 
bar | 2 
bar | 5 
baz | 4 
bim | 3 
foo | 2 
foo | 3 

結果は次のようになります。

w.name | sum 
-------+------ 
bar | 7 
baz | 4 
bim | 3 
foo | 5 

マイテーブル:

表A:

id | title | author | created_at 
----+-------+--------+------------- 
... | ... | ... | ... 
11 | abc | ccc | Thu, 5 Apr 2012 08:01:25 GMT 
12 | bcb | ddd | Thu, 5 Apr 2012 10:11:15 GMT 
13 | dfg | aaa | Fri, 6 Apr 2012 07:33:45 GMT 

表のAW:

id | aid | wid | freq 
----+-----+-----+------ 
... | ... | ... | ... 
201 | 11 | 2 | 2 
202 | 11 | 3 | 4 
203 | 11 | 17 | 2 
204 | 12 | 17 | 3 
205 | 12 | 66 | 1 
206 | 12 | 12 | 2 
207 | 12 | 24 | 5 
208 | 12 | 7 | 3 
209 | 13 | 2 | 5 
210 | 13 | ... | ... 

表のW:各Wに対して

id | name | ... 
----+-------+-------- 
... | ... | ... 
2 | bar | ... 
3 | baz | ... 
... | ... | ... 
7 | bim | ... 
... | ... | ... 
17 | foo | 

答えて

1

、作成Aとの周波数の和今日:

select W.name 
,  sum(AW.frequency) 
from A 
join AW 
on  AW.aid = a.id 
join W 
on  W.id = AW.bid 
where '2012-04-08' < A.created_at and A.created_at < '2012-04-09' 
group by 
     W.name 
+0

申し訳声明 – dash1e

1
SELECT w.name, SUM(aw.frequency) 
FROM a INNER JOIN aw ON (a.id = aw.aid) 
     INNER JOIN w ON (aw.wid = w.id) 
WHERE a.created_at >= INITIAL_DATE and a.created_at <= END_DATE 
GROUP BY w.name 
+0

でグループを逃します私は問題の説明で十分に明確ではなかった。 w.idが別のa.idで見つかる可能性がある場合は、それを集計する必要があります。問題の説明の私の更新を見てください。 – user1243091

関連する問題