如果我有桌子
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中执行此操作的最佳方法是什么?
编辑:我有一个不同的代码我刚刚编写了一个快速示例,所以我可以看看它是如何完成的,然后自己尝试。
答案 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
<强>更新强>
使用相同的表名。
答案 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);