掌握聚合函数:COUNT,MAX,MIN,SUM,AVG,GROUP BY和HAVING子句的用法,Where和HAVING的区别
对于Java后端开发来说,必须要掌握常用的聚合函数:COUNT,MAX,MIN,SUM,AVG,掌握GROUP BY和HAVING子句的用法,掌握Where和HAVING的区别:
✅ 一、常用聚合函数(聚合函数用于统计汇总数据)
聚合函数 | 作用 | 示例 |
---|---|---|
COUNT() | 统计记录条数 | SELECT COUNT(*) FROM 表名 |
MAX() | 求最大值 | SELECT MAX(价格) FROM 商品 |
MIN() | 求最小值 | SELECT MIN(价格) FROM 商品 |
SUM() | 求总和 | SELECT SUM(数量) FROM 订单 |
AVG() | 求平均值 | SELECT AVG(价格) FROM 商品 |
✅ 二、GROUP BY 子句(用于分组统计)
GROUP BY
将数据按照某个字段进行分组,并配合聚合函数使用。
示例:
SELECT 部门, AVG(薪资)
FROM 员工
GROUP BY 部门;
含义:按“部门”分组,统计每个部门的平均薪资。
✅ 三、HAVING 子句(对分组后的数据进行过滤)
WHERE
是在 分组前 对原始数据进行过滤。HAVING
是在 分组后 对聚合结果进行过滤。
示例:
SELECT 部门, AVG(薪资) AS 平均薪资
FROM 员工
GROUP BY 部门
HAVING AVG(薪资) > 8000;
含义:先按部门分组,再筛选平均薪资大于8000的部门。
✅ 四、WHERE 和 HAVING 的区别总结:
对比项 | WHERE | HAVING |
---|---|---|
作用阶段 | 分组前(原始数据) | 分组后(聚合结果) |
是否能用聚合函数 | ❌不能 | ✅可以 |
示例 | WHERE 薪资 > 5000 | HAVING AVG(薪资) > 8000 |
✅ 五、综合示例
假设我们有一个员工表 employees
:
id | name | department | salary |
---|---|---|---|
1 | 张三 | IT | 8000 |
2 | 李四 | HR | 6000 |
3 | 王五 | IT | 9000 |
4 | 赵六 | HR | 5000 |
5 | 孙七 | Sales | 7000 |
查询平均工资大于7000的部门及其平均工资:
SELECT department, AVG(salary) AS avg_salary
FROM employees
GROUP BY department
HAVING AVG(salary) > 7000;