在SQL查询中,聚合函数和排序的执行顺序遵循特定的逻辑流程,理解这个顺序对于编写高效查询至关重要。
SELECT department, AVG(salary) as avg_salary
FROM employees
WHERE hire_date > '2020-01-01'
GROUP BY department
HAVING COUNT(*) > 5
ORDER BY avg_salary DESC
LIMIT 10;
执行顺序: 1. 从employees表获取数据 2. 过滤hire_date > '2020-01-01'的记录 3. 按department分组 4. 过滤掉员工数≤5的部门 5. 计算每个部门的平均工资 6. 按平均工资降序排序 7. 只返回前10条记录
在WHERE中使用聚合函数:这是不允许的,因为WHERE在GROUP BY之前执行
WHERE AVG(salary) > 50000
在GROUP BY中使用列别名:GROUP BY在SELECT之前执行,不能使用SELECT中定义的别名
GROUP BY dept_alias
理解这个执行顺序有助于编写正确且高效的SQL查询,避免常见的逻辑错误。