Mysql -[Err] 1111 - Invalid use of group function

Mysql - [Err] 1111 - Invalid use of group function

描述:[Err] 1111 - Invalid use of group function意思是聚合函数的无效用法
报错SQL:

SELECT
	T2.code_id codeId,
	T1.user_id userId,
	T1.user_name CODE,
	SUM(T2.progress) AS progressSum
FROM
	T_USER_INFO T1
LEFT OUTER JOIN T_PLANNING T2 ON T2.code_id = T1.user_id
WHERE
	(
		T1.ENABLED = 1
		AND (SUM(T2.progress)) LIKE '%12%'
	)
GROUP BY
	T2.code_id,
	T1.user_id,
	T1.user_name

正确SQL:

SELECT
	T2.code_id codeId,
	T1.user_id userId,
	T1.user_name CODE,
	SUM(T2.progress) AS progressSum
FROM
	T_USER_INFO T1
LEFT OUTER JOIN T_PLANNING T2 ON T2.code_id = T1.user_id
WHERE
	(T1.ENABLED = 1)
GROUP BY
	T2.code_id,
	T1.user_id,
	T1.user_name
HAVING
	(SUM(T2.progress)) LIKE '%12%'

SQL还是比较好理解,主要是想实现聚合函数的过滤。我猜很多人第一想法是用WHERE,所以有了以上的报错。那为什么报错呢?
答:因为在where语句中使用了聚合函数。

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

**“HAVING”**是一个过滤声明,过滤是在查询数据库的结果返回之后进行过滤,即在结果返回之后起作用,且having后面可以使用“聚合函数”。注意:having是对查出来的结果进行过滤,那么对没有查出来的值就不能使用having。

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值