在SQL查询中,子句的执行顺序与它们在查询中的书写顺序不同。对于HAVING和SELECT的执行顺序问题:
HAVING在SELECT之前执行。这是因为: - HAVING筛选的是GROUP BY之后的分组结果 - SELECT则是在HAVING筛选之后才确定最终返回的列
SELECT department, AVG(salary) as avg_salary
FROM employees
WHERE hire_date > '2020-01-01'
GROUP BY department
HAVING AVG(salary) > 50000
ORDER BY avg_salary DESC;
执行流程: 1. 从employees表获取数据 2. 筛选hire_date > '2020-01-01'的记录 3. 按department分组 4. 筛选出平均工资>50000的分组 5. 计算并选择department和AVG(salary)作为结果列 6. 按avg_salary降序排列