一个sql的大致语句如下:
select ...
from ...
where ...
group by ...
having ...
order by ...
这些语句存在着执行顺序,规则如下:
先执行from ,查找到在哪个表中进行查询
再执行where,判断条件
再执行group by 进行分组操作
执行分组函数,按照group by里面的分组条件
执行having,进行条件判断
执行select语句
最后执行order by 将数据进行排序
从这个排序规则可以看出分组函数只能出现在having、select、order by的后面,出现在其他地方都是错误的。
并且,如果select和having后面出现了分组函数,那么select和having后面没有被分组函数修饰的列,就必须出现在group by后面(也就是作为分组的条件,这样才不会报错)