2010-03-01 22 views
1

我有兩個以1:n關係鏈接的表。我想獲得b中具有相應條目的所有行的平均值(值)。但是,如果b中有一行中有多行,這些顯然會多次計數。我怎樣才能避免這種情況?獲得avg而不計算兩次點擊

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

在加入之前,只需區分不同的援助值。語法可以作出整潔,但這個工程:

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

而不是加入操作,你可以使用子查詢:

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