为什么sql语句中where后面不能直接跟分组函数?--详解

当我们错误的使用分组函数之后,mysql会报错,提示“ Invalid use of group function”,这就是今天要说的问题:where后面不能直接跟分组函数。

分组函数有五种count、sum、avg、max、min

 

为什么他们不能跟在where后面?

这几个函数在使用时一般都和group by联合使用,原理是先分组在进行函数计算。

当然我们在平常使用时,有这种情况。

select max(age) from t_student

这个sql语句中并没有group by,但还是可以使用分组函数max。这是因为当sql语句种没有手动使用group by时,那整个调用的表默认是一个分组。max函数是在这个大分组中取的最大值。所以我们就可以知道,应该是先分组,再调用分组函数,这样的逻辑。

 

接下来我们了解下sql语句执行的顺序

例:从学生表t_student中筛选出3年级年龄最大的女孩儿们,结果按照学号id升序

select max(age) from t_student where grade = 3 group by sex having sex = girl order by studentID asc

第一步:from 选择表

第二步:where 筛选条件,筛选对象--行

第三步:group by 将筛选出来的数据进行分组

第四步:having 筛选条件,筛选对象--组

第五步:select 选取最后的结果

第六步:order by 将结果按照特定顺序排列

 

从上面的执行顺序我们又知道了先执行where,后group by分组,分组完之后才能使用分组函数。

所以where后面的筛选条件出现了分组函数那就会报错。还没有进行分组呢,不能使用分组函数。

当我们遇到这种情况时,就要改变思路,用子查询即可,where后面跟一个子查询就迎刃而解了。

猜你喜欢

转载自blog.csdn.net/liangjiabao5555/article/details/105474876
今日推荐