扫码关注官方订阅号
走同样的路,发现不同的人生
因为 name === AVG(name) ,你group by name 后AVG(name)又不是所有的均值。
name === AVG(name)
group by name
AVG(name)
SELECT name FROM ceshi GROUP BY name HAVING name < 2;
我测试能取出来,name HAVING 他们之间缺少空格?
name HAVING
SELECT `name`, AVG(`name`) FROM ceshi GROUP BY `name`
跑一下这条sql你就知道了。这里的AVG(name)并不是所有name的平均值,而是group by后的name的平均值,所以name<avg(name)恒为false。
name
group by
name<avg(name)
解决方法: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;
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
扫描下载App
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
因为
name === AVG(name)
,你group by name
后AVG(name)
又不是所有的均值。我测试能取出来,
name HAVING
他们之间缺少空格?跑一下这条sql你就知道了。这里的
AVG(name)
并不是所有name
的平均值,而是group by
后的name
的平均值,所以name<avg(name)
恒为false。解决方法:
1、在程序里先跑一边统计平均值的sql,然后把计算好的统计值填入该sql;
2、(不推荐在生产环境使用)having里面使用子查询,
3、使用变量(本质上就是1),