我有两个以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。
答案 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;