出现问题:
查询:select d.* from v2 inner join departments
d 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一起用,今天试了下,只是一个筛选条件,没有什么捆绑使用的讲究。