关于mysql的查询问题,子查询

这是我的查询语句:

SELECT

  • FROM departments WHERE department_id = (SELECT department_id FROM employees GROUP BY department_id HAVING AVG(salary) = (SELECT MIN(AVG(salary)) FROM employees GROUP BY department_id))

最后执行的时候,mysql报出了
错误代码: 1111 Invalid use of group function

求大神指点,该怎么改这个sql语句?

2个回答

使用[NOT]IN/EXISTS引发的子查询
子查询形式:
1.使用IN的子查询
2.使用[NOT]IN的子查询
语法结构:operand comparison_operator [NOT] IN (subquery)
=ANY 运算符与IN 等效,!=ALL或<>ALL运算符与NOT IN等效
3.使用[NOT]EXISTS的子查询(用的相对较少)
如果子查询返回任何行,EXISTS将返回TRUE,否则为FALSE

例,查找不是超极本的商品列表:
mysql> SELECT * FROM tdb_goods WHERE goods_cate NOT IN(SELECT goods_cate FROM tdb_goods WHERE goods_cate = '超级本');
图片说明

你的子查询中使用了GROUP BY,得到的结果就不是一个值,而外层写的 WHERE department_id = ,只能等于一个值,所以会报错。
如果子查询得到多条记录,则应该改用in,若是考虑到in效率低则可以使用其他替代方案

guohaolong00000
Guo_HaoLong 回复be66young: 单独执行这个报错不?SELECT department_id FROM employees GROUP BY department_id HAVING AVG(salary) = (SELECT MIN(AVG(salary)) FROM employees GROUP BY department_id)
接近 3 年之前 回复
abc286229825
站在风口哈气 改为in后也是一样的错误
接近 3 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问