predicates in the having clause are applied after the formation of the group by
GROUP BYSUM、AVG、COUNT 等)。GROUP BY 后面列出的字段必须出现在 SELECT 子句里(非聚合字段)。-- 按部门分组,计算每个部门的平均工资
SELECT dept, AVG(salary)
FROM employees
GROUP BY dept;
HAVINGWHERE:
WHERE 在 分组前 过滤行。HAVING 在 分组后 过滤组。-- 找出平均工资大于 5000 的部门
SELECT dept, AVG(salary) AS avg_salary
FROM employees
GROUP BY dept
HAVING AVG(salary) > 5000;
WHERE vs HAVINGSELECT dept, COUNT(*) AS emp_count
FROM employees
WHERE salary > 3000 -- 先过滤掉工资低的员工
GROUP BY dept
HAVING COUNT(*) >= 10; -- 再过滤掉人数不足 10 的部门