出现问题:
查询: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一起用,今天试了下,只是一个筛选条件,没有什么捆绑使用的讲究。
本文解析了一种常见的SQL查询错误,即在WHERE子句中直接使用聚合函数导致的Invalid use of group function错误,并提供了正确的查询方式。同时,文章区分了WHERE与HAVING子句的功能与适用场景,帮助读者理解如何正确地进行SQL查询。

1112

被折叠的 条评论
为什么被折叠?



