Sql 在一定条件下如何求多对多的和?
我有一个多对多的关系,我想找到在某个日期创建的一些a的所有W及其总和(频率)。 最好的方法是什么 结果应而不是为:Sql 在一定条件下如何求多对多的和?,sql,Sql,我有一个多对多的关系,我想找到在某个日期创建的一些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
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:
id | name | ...
----+-------+--------
... | ... | ...
2 | bar | ...
3 | baz | ...
... | ... | ...
7 | bim | ...
... | ... | ...
17 | foo |
对于每个
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
选择W.name
,总和(AW.频率)
从
加入AW
关于AW.aid=a.id
加入W
在W.id=AW.bid上
其中“2012-04-08”和“2012-04-09”
分组
W.name
选择w.名称、总和(aw.频率)
从内部连接aw ON(a.id=aw.aid)
内部连接w ON(aw.wid=w.id)
其中a.created_at>=初始日期和a.created_at抱歉,我的问题描述不够清楚。如果可以在另一个a.id中找到w.id,则应将其汇总。请在问题描述中查看我的更新。
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