在 MySQL 中,SQL 查询的执行顺序通常按照以下顺序进行:

  1. FROM:从指定的表中选择数据。
  2. WHERE:对数据进行筛选,只选择满足条件的行。
  3. GROUP BY:按照指定的列对数据进行分组。
  4. SELECT:选择要返回的列或表达式。
  5. HAVING:对分组后的数据进行筛选,只选择满足条件的分组。
  6. UNION [ALL]
  7. ORDER BY:对结果进行排序。
  8. LIMIT:限制返回的行数(也称offset)。

请记住,这是一般情况下的执行顺序,并不一定适用于所有情况。优化器可能会根据查询的具体条件和表的索引情况进行优化,改变执行顺序以提高性能。

 

根据上面介绍的 select 与 having 的顺序,下面①中的分组语句是正确的, 它等同于 ②。
① select enterprise_id, count(*) as total from enterprise_agreement group by enterprise_id having total > 10
② select enterprise_id, count(*) as total from enterprise_agreement group by enterprise_id having count(*) > 10