SQL 的书写顺序和执行顺序是不同的,所以有时候会产生让人头疼的问题,比如having不能用窗口函数等。下面介绍了SQL的运行顺序.from/joinwheregroup byhavingselectdistinctorder bylimit详解1.读取数据要想执行查询,执行引擎首先要找到相对应的数据(表),所以先执行from。如果有多张表join,则会去扫描所有提到的表,并且用ON里的条件进行聚合。它的扫描顺序是从左往右的。2.按条件过滤使用where从句里的条件过滤掉不符合条件的记录。此时数据还没有分组,所以无法使用聚合函数。同时因为还没进行列选取工作(select),所以也无法使用别名。3.分组聚合在这一步会根据group by的条件进行分组聚合,将符合条件的数据放到同一组里面,为之后的聚合计算做准备。4.聚合计算在上一步分组完成后,having这里就可以使用聚合函数进行计算了。这里可以对聚合计算后的条件进行一些过滤,比如大于平均值等。 常见的聚合函数AVG:返回平均值COUNT:返回行数FIRST:返回第一个记录的值LAST:返回最后一个记录的值MAX: 返回最大值MIN:返回最小值SUM: 返回总和5.列选取在这里,执行引擎会根据语句选取需要的列或者表达式。因为这里已经完成了聚合分组,所以可以使用聚合函数/窗口函数计算后的结果作为列。同时在这里也支持对列进行重命名。6.去重在这一步会对最终选取的结果进行去重.7.排序这一步会对最终结果根据order by语句指定的列进行排序.8.返回指定结果数量通过limit/offset 选取指定数量的记录进行返回。