比较MYSQL的平均值

时间:2013-07-11 02:43:01

标签: 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中执行此操作的最佳方法是什么?

编辑:我有一个不同的代码我刚刚编写了一个快速示例,所以我可以看看它是如何完成的,然后自己尝试。

3 个答案:

答案 0 :(得分: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

<强>更新

使用相同的表名。

答案 1 :(得分:1)

您需要单独计算平均值。您可以使用内部查询来执行此操作:

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

在Oracle中,您可以使用“with”子句,也称为“公用表表达式”,以提高效率。在MySQL中,您可能必须使用两个单独的语句 - 一个用于获取平均值,另一个用于执行选择 - 如果优化器为每一行执行内部查询。

答案 2 :(得分:0)

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