2012-04-08 18 views
1

我有一個多對多的關係,我想找出所有的W和它們的總和(頻率),這是在特定日期創建的一些A的。 這樣做的最好方法是什麼?如何在一定條件下找到多對多的總和?

結果應該是:

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 | ... | ... 

表寬:

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

回答

1

對於每個W,頻率與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 2012-04-08 08:34:58

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

對不起缺少組,在我的問題描述中我還不夠清楚。如果可以在另一個a.id中找到w.id,則應該總結它。請在問題描述中查看我的更新。 – user1243091 2012-04-08 13:04:18