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

SELECT name FROM ceshi GROUP BY nameHAVING name< AVG(name)

https://img.mukewang.com/5cc01a4d0001131503810156.jpg

https://img2.mukewang.com/5cc01a500001769b02790124.jpg

叮当猫咪
浏览 936回答 3
3回答

MYYA

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

米琪卡哇伊

SELECT&nbsp;name&nbsp;FROM&nbsp;ceshi&nbsp;GROUP&nbsp;BY&nbsp;name&nbsp;HAVING&nbsp;name&nbsp;<&nbsp;2;我测试能取出来,name HAVING&nbsp;他们之间缺少空格?

慕的地8271018

SELECT `name`, AVG(`name`) FROM ceshiGROUP BY `name`&nbsp;跑一下这条sql你就知道了。这里的AVG(name)并不是所有name的平均值,而是group by后的name的平均值,所以name<avg(name)恒为false。解决方法:1、在程序里先跑一边统计平均值的sql,然后把计算好的统计值填入该sql;2、(不推荐在生产环境使用)having里面使用子查询,SELECT `name` FROM ceshiGROUP BY `name`&nbsp;HAVING `name` < (SELECT AVG(`name`) FROM ceshi);3、使用变量(本质上就是1),SET @name_avg = (SELECT AVG(`name`) FROM ceshi);SELECT `name` FROM ceshiGROUP BY `name`HAVING `name` < @name_avg;
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java