为了账号安全,请及时绑定邮箱和手机立即绑定

mysql中这句select为什么查询出的是空数据?

mysql中这句select为什么查询出的是空数据?

叮当猫咪 2019-03-12 22:19:37
SELECT name FROM ceshi GROUP BY nameHAVING name< AVG(name)
查看完整描述

3 回答

?
MYYA

TA贡献1868条经验 获得超4个赞

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


查看完整回答
反对 回复 2019-04-24
?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

SELECT name FROM ceshi GROUP BY name HAVING name < 2;

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


查看完整回答
反对 回复 2019-04-24
?
慕的地8271018

TA贡献1796条经验 获得超4个赞

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;


查看完整回答
反对 回复 2019-04-24
  • 3 回答
  • 0 关注
  • 935 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信