聚合函数要与group by语句一并使用(若select中仅有聚合函数列,group by可省略)
group by的作用就是分组,只有把数据进行分组后才可以用聚合函数求值
而group by是一个分界点,分隔where与having的,按照sql语句的执行顺序
当执行where时,数据尚未执行group by,无法分组,就不能使用聚合函数
而当执行having时,数据已经按照group by执行了分组,即可使用聚合函数
顺便一提,select的执行顺序在having之后
Where是一个约束声明,使用Where来约束从数据库查询的范围,Where是在结果返回之前起作用的。
select和having都可以添加聚合函数,这是由sql的执行顺序决定的。
sql执行顺序如下:
from--where---group by --having---select ---order by --limit
先执行from部分,知道从哪个表提取数据,然后执行where对条件进行限,然后通过groupby进行聚合,然后通过having对聚合后的结果进行过滤,再利用select把数据查询出来, 然后通过order by 对数据进行排序,通过limit找出前几位。
命令还没有执行,聚 集函数还没有形成字段,它去哪儿找这个聚集函数呢?