掌握聚合函数: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 将数据按照某个字段进行分组,并配合聚合函数使用。

示例:

sql 复制代码
SELECT 部门, AVG(薪资)
FROM 员工
GROUP BY 部门;

含义:按"部门"分组,统计每个部门的平均薪资。


✅ 三、HAVING 子句(对分组后的数据进行过滤)

  • WHERE 是在 分组前 对原始数据进行过滤。
  • HAVING 是在 分组后 对聚合结果进行过滤。

示例:

sql 复制代码
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的部门及其平均工资:

sql 复制代码
SELECT department, AVG(salary) AS avg_salary
FROM employees
GROUP BY department
HAVING AVG(salary) > 7000;

相关推荐
小马同学-8 小时前
MySQL主从复制和读写分离
数据库·mysql
海绵宝宝转agent8 小时前
MySql高频面试八股开源笔记总结
mysql·面试·开源
余槐i10 小时前
数据没回滚也不报错:@Transactional 自调用失效的 3 种复现与修复
spring boot·mysql·多线程·spring 事务
写后端的胖头鱼14 小时前
【高频面试题】FullText 全文索引(MySQL)
数据库·mysql·索引·全文索引
code_whiter16 小时前
01-MySQL数据库基础
数据库·mysql
vx_Biye_Design19 小时前
springboot宠物领养与救助平台64334-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·mysql·课程设计·宠物
做运维的阿瑞19 小时前
mysql数据库视图笔记:创建、修改、删除与适用场景
数据库·笔记·mysql
java1234_小锋20 小时前
【技术专题】Mysql8 数据库 - Mysql8 数据库基本操作
数据库·mysql
专业程序开发源21 小时前
springboot生命故事书制作小程序65290-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·mysql·小程序·课程设计
jason.zeng@150220721 小时前
canal做mysql的异步传输工具
数据库·mysql·linq