java - mysql中这句select为什么查询出的是空数据?
怪我咯
怪我咯 2017-04-18 10:00:50
[Java讨论组]
怪我咯
怪我咯

走同样的路,发现不同的人生

全部回复(3)
大家讲道理

因为 name === AVG(name) ,你group by nameAVG(name)又不是所有的均值。

天蓬老师
SELECT name FROM ceshi GROUP BY name HAVING name < 2;

我测试能取出来,name HAVING 他们之间缺少空格?

阿神
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;
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号