2013-07-11 81 views
1

如果我有一個表比較平均在MYSQL

shirt 

+--------+------+ 
| color | size | 
+--------+------+ 
| red | 2 | 
| red | 4 | 
| red | 2 | 
| blue | 3 | 
| blue | 5 | 
| yellow | 2 | 
| yellow | 7 | 
+--------+------+ 

,我只想顯示那些是平均

上方,

shirt 

+--------+------+ 
| color | size | 
+--------+------+ 
| red | 4 | 
| blue | 5 | 
| yellow | 7 | 
+--------+------+ 

什麼是最好的方式在MYSQL中這樣做?

編輯:我有一個不同的集合的代碼,我只是編寫了一個快速示例,所以我可以看到它是如何完成的,然後自己嘗試。

+2

難道你不知道如何使用與我對你最後一個問題的答案相同的想法做到這一點? SO不是讓人們爲你寫代碼的地方,你應該先嚐試自己解決問題。 – Barmar

回答

4

嘗試:

SELECT shirt.color, shirt.size 
FROM shirt INNER JOIN (SELECT color, AVG(size) size FROM shirt GROUP BY color) AS table2 
ON shirt.color = table2.color 
WHERE shirt.size >= table2.size 

這裏的SQLFiddle

UPDATE

用相同的表名。

+0

你的小提琴很酷..喜歡它.. – Olrac

+1

非常感謝你好先生。 – Katseye

+0

謹慎從downvoter發表評論? –

0
select * from shirts where size > (select avg(size)/2 from shirts); 
1

您需要分別計算平均值。您可以使用內部查詢來完成:

select color, size 
from shirts 
where size > (select avg(size) from shirts) 

在Oracle中,您可以使用「with」子句,即「公用表表達式」來提高效率。在MySQL中,如果優化器爲每一行執行內部查詢,則可能必須使用兩個單獨的語句 - 一個用於獲取平均值,一個用於執行select。