文章目录
-
- 一、插入查询结果
- 二、聚合函数
-
- 常用聚合函数(含示例)
-
- count()统计所有的行
- [SUM(列名) 求和](#SUM(列名) 求和)
- [AVG() 求平均值](#AVG() 求平均值)
- MAX(),MIN()
- [GROUP BY子句](#GROUP BY子句)
- HAVING子句
一、插入查询结果
现在有两张表,想把stu中的数据复制到stu1里面

有以下三种方法
- 1、 一条一条数据重新插入一遍
- 2、把原来的数据导出来,再把表名改一下,再改入到目标表中
- 3、可以使用insert into select 语句
推荐使用第三种方法
sql
INSERT INTO 目标表名 [(列1, 列2, ...)] -- 目标表是插入数据的表
SELECT 列1, 列2, ... --列与列之间需要匹配
FROM 旧表表名 -- 旧表是复制数据的表
WHERE 条件;
示例:

二、聚合函数
MYSQL中内置的函数
常用聚合函数(含示例)
聚合函数这些操作都是针对某一列进行运算的,表达式查询是对一行记录中的列与列之间进行运算的
| 函数 | 作用说明 | 示例 |
|---|---|---|
| COUNT([DISTINCT] expr) | 返回查询到的数据数量(统计行数) | SELECT COUNT(*) FROM student; |
| SUM([DISTINCT] expr) | 返回某列数据的总和(仅适用于数值类型) | SELECT SUM(score) FROM student; |
| AVG([DISTINCT] expr) | 返回某列数据的平均值(仅适用于数值类型) | SELECT AVG(score) FROM student; |
| MAX([DISTINCT] expr) | 返回某列数据的最大值 | SELECT MAX(score) FROM student; |
| MIN([DISTINCT] expr) | 返回某列数据的最小值 | SELECT MIN(score) FROM student; |
count()统计所有的行
sql
--count()
select count() from 表名;
示例:
- *统计表中的行数

- 使用count()统计指定列,null值不参与统计

SUM(列名) 求和
把查询结果中的所有行中的指定列进行相加
示例:
- 计算所有学生的语文成绩的总分

- 在sum()求和时,null值不参与运算

AVG() 求平均值
示例:
- 对所有同学的数学成绩求平均值

- 求语文,数学,英语三门课的总分的平均值(参数可以是表达式),也可以使用别名

MAX(),MIN()
求所有行中指定列的最大值,最小值
示例:
- 找出语文成绩的最高分和英语成绩的最低分(多个聚合函数可以同时使用),可以使用别名

GROUP BY子句
在 SELECT 查询中使用 GROUP BY 可以把数据按指定列分组。分组后,SELECT 里直接列出的字段必须是用来分组的列;如果想显示其他列的值,就需要用聚合函数(比如 SUM、COUNT、AVG 等)来处理。
sql
SELECT column1, SUM(column2), ...
FROM table_name
GROUP BY column1, column3;
说明:
-
column1, column3:要分组的列(可以分多列)
-
SUM(column2):没有被分组的列,如果想在结果里显示,就必须用聚合函数处理(如 SUM、COUNT、AVG 等)
-
GROUP BY:分组查询的关键字
示例:
- 计算不同角色的工资平均值
mysql内部先分组再计算

- round(数值,小数点位数)

- group by 后面可以放order by,对分组结果进行排序

HAVING子句
group by子句进行分组以后,需要对分组之后的结果进行过滤,不能使用where语句,要使用having子句
⚠️ 注意:where 和having的区别总结
| 特点 | WHERE | HAVING |
|---|---|---|
| 作用对象 | 原始数据行 | 分组后的聚合结果 |
| 使用位置 | GROUP BY 前 | GROUP BY 后 |
| 函数支持 | 不支持聚合函数 | 支持聚合函数(如 COUNT, SUM, AVG) |
示例:
- 对角色分组后的工资进行筛选

- 显示每个角色的最高工资,最低工资,平均工资

- 显示平均工资低于1500的角色和它的平均工资
