SELECT name FROM ceshi GROUP BY nameHAVING name< AVG(name)
3 回答
米琪卡哇伊
TA贡献1998条经验 获得超6个赞
SELECT name FROM ceshi GROUP BY name HAVING name < 2;
我测试能取出来,name HAVING
他们之间缺少空格?
慕的地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;
添加回答
举报
0/150
提交
取消