执行顺序

from -> on -> join -> where -> group by -> agg_func -> with rollup/cube -> having -> select -> distinct -> order by -> limit

having与where的区别

where是在group by 之前对表进行行级过滤。
having是在group by 之后,对group by后的结果进行过滤。

  • 如找到平均工资超过20000万的员工
    1. select emp_no,avg(salary) as salary_avg
    2. from salaries
    3. group by emp_no
    4. having salary_avg > 120000
    5. order by salary_avg
    6. limit 5;

image.png