获得平均而不计算两次命中

时间:2010-03-01 12:19:04

标签: mysql

我有两个以1:n关系链接的表。我想得到b中具有相应条目的所有行的平均值(值)。但是,如果b中的行中有多行,则显然会多次计算这些行。我怎么能避免这个?

mysql> select * from a;
+----+-------+
| id | value |
+----+-------+
|  1 |     1 |
|  4 |     0 |
+----+-------+

mysql> select * from b;
+------+
| aid  |
+------+
|    1 |
|    1 |
|    4 |
+------+

mysql> select avg(value) from a,b where a.id=b.aid;
+------------+
| avg(value) |
+------------+
|     0.6667 |
+------------+

最后一个结果应为0.5,因为a中有两行,其值为0和1,其值为b。

2 个答案:

答案 0 :(得分:4)

您可以使用子查询代替 join 操作:

SELECT AVG(value) FROM a
WHERE id IN (SELECT DISTINCT aid FROM b)

答案 1 :(得分:0)

在加入之前,只需区分辅助值即可。语法可以更整洁,但这有效:

select avg(value) from a,(select distinct aid from b) b where a.id=b.aid;