mysql中出现错误代码1111,Invalid use of group function

出现问题:
查询:select d.* from v2 inner join departmentsd on d.department_id=v2.department_id where v2.ag=min(v2.ag) LIMIT 0, 1000错误代码: 1111
Invalid use of group function

错误代码:

#查询平均工资最低的部门信息
SELECT d.* 
FROM v2 INNER JOIN `departments`d 
ON d.`department_id`=v2.`department_id`
WHERE v2.`ag`=MIN(v2.`ag`);

正确代码:

SELECT d.* 
FROM v2 INNER JOIN `departments`d 
ON d.`department_id`=v2.`department_id`
WHERE v2.`ag`=(SELECT MIN(v2.`ag`) FROM v2);

百度后发现,是由于在where语句中使用了聚合函数。

where和having的作用以及区别:
WHERE是一个约束声明,在查询数据库的结果返回之前对数据库中的查询条件进行约束,即在结果返回之前起作用,且where后面不能使用“聚合函数”,因为where的执行顺序在聚合函数之前。

HAVING是一个过滤声明,过滤是在查询数据库的结果返回之后进行过滤,即在结果返回之后起作用,且having后面可以使用“聚合函数”。注意:having是对查出来的结果进行过滤,那么对没有查出来的值就不能使用having。之前一直以为having必须与group by一起用,今天试了下,只是一个筛选条件,没有什么捆绑使用的讲究。

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值