1

如果我有一张桌子

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

编辑:我有一个不同的集合的代码我只是做了一个简单的例子,所以我可以看到它是如何完成的,然后自己尝试一下。

4

3 回答 3

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

更新

具有相同的表名。

于 2013-07-11T02:52:44.863 回答
1

您需要单独计算平均值。您可以使用内部查询来做到这一点:

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

在 Oracle 中,您可以使用“with”子句,即“公用表表达式”来提高效率。在 MySQL 中,如果优化器对每一行进行内部查询,您可能必须使用两条单​​独的语句——一条获取平均值,一条执行选择。

于 2013-07-11T02:51:23.770 回答
0
select * from shirts where size > (select avg(size) / 2 from shirts);
于 2013-07-11T02:51:19.000 回答