初衷,本想通过group by sql语句查询出不同id下总数在一定范围内的数据,所以产生如下的sql,及错误sql

select * from TBL_MONTH_ONLINE_INFO m where SUM(c.money)=0 AND STATDATE < '201707' AND STATDATE > '201801' GROUP BY c.studentId

本来要实现的功能是分组查询出总数在一定范围内,且在规定日期内的总数。才产生以上的sql,导致报以上的错误:[Err] 1111 - Invalid use of group function;

正确的sql语句应该为:

select * from TBL_MONTH_ONLINE_INFO m where STATDATE < '201707' AND STATDATE > '201801' GROUP BY c.studentId  HAVING SUM(c.money)=0

用以上的sql既可以执行。

GROUP BY,顾名思义:根据...分组,在SQL中常根据指定字段分组(指定字段内容相同是为一组),然后针对组进行相关操作

WHERE和HAVING的区别在于:

where 子句的作用是 对查询结果进行分组前 ,将不符合where条件的行去掉,即在分组之前过滤数据, where条件中不能包含聚组函数 ,使用where条件过滤出特定的行。