SELECT name
FROM ceshi GROUP BY name
HAVING name
< AVG(name
)
SELECT `name`, AVG(`name`) FROM ceshi
GROUP BY `name`
跑一下这条sql你就知道了。这里的AVG(name)
并不是所有name
的平均值,而是group by
后的name
的平均值,所以name<avg(name)
恒为false。
解决方法:
1、在程序里先跑一边统计平均值的sql,然后把计算好的统计值填入该sql;
2、(不推荐在生产环境使用)having里面使用子查询,
SELECT `name` FROM ceshi
GROUP BY `name`
HAVING `name` < (SELECT AVG(`name`) FROM ceshi);
3、使用变量(本质上就是1),
SET @name_avg = (SELECT AVG(`name`) FROM ceshi);
SELECT `name` FROM ceshi
GROUP BY `name`
HAVING `name` < @name_avg;
4 回答1.4k 阅读✓ 已解决
4 回答1.2k 阅读✓ 已解决
8 回答1.3k 阅读
1 回答2.6k 阅读✓ 已解决
3 回答1k 阅读✓ 已解决
2 回答733 阅读✓ 已解决
2 回答1.7k 阅读
因为
name === AVG(name)
,你group by name
后AVG(name)
又不是所有的均值。