MySQL AVG() 函数使用指南
MySQL AVG()
函数计算并返回表达式的平均值。
AVG()
语法
这里是 MySQL AVG()
函数的语法:
AVG(expr)
AVG(DISTINCT expr)
我们通常在 SQL 中按如下方式使用 AVG()
函数:
SELECT AVG(expr), ...
FROM table_name
[WHERE ...];
或者按如下方式结合 GROUP BY
子句使用 AVG()
函数:
SELECT AVG(expr), group_expr1, group_expr2, ...
FROM table_name
[WHERE ...]
GROUP BY group_expr1, group_expr2, ...;
参数
expr
expr
一个用于聚合运算的表达式。它可以是一个列名,也可以是一个表达式。group_expr1, group_expr2, ...
- 用于分组的表达式或者列名。
返回值
AVG(expr)
函数返回表达式的平均值。 AVG(DISTINCT expr)
函数返回 expr
中唯一值的平均值。
AVG()
函数会忽略NULL
值。- 如果没有匹配的行,
AVG()
函数返回NULL
。
AVG()
示例
我们将通过 student_score
表进行演示。让我们先创建演示表并插入测试数据。
CREATE TABLE `student_score` (
`id` INT PRIMARY KEY AUTO_INCREMENT,
`name` VARCHAR(255) NOT NULL,
`subject` VARCHAR(255) NOT NULL,
`score` INT NOT NULL
);
INSERT INTO `student_score` (`name`, `subject`, `score`)
VALUES ('Tom', 'Math', 80),
('Tom', 'English', 90),
('Jim', 'Math', 84),
('Jim', 'English', 96),
('Tim', 'Math', 80),
('Tim', 'English', 98);
以下是表中的数据:
+----+------+---------+-------+
| id | name | subject | score |
+----+------+---------+-------+
| 1 | Tom | Math | 80 |
| 2 | Tom | English | 90 |
| 3 | Jim | Math | 84 |
| 4 | Jim | English | 96 |
| 5 | Tim | Math | 80 |
| 6 | Tim | English | 98 |
+----+------+---------+-------+
AVG()
简单例子
以下 SQL 语句返回所有成绩的平均成绩。
SELECT AVG(score) from student_score;
+------------+
| AVG(score) |
+------------+
| 88.0000 |
+------------+
AVG()
结合 GROUP BY
让我们使用 AVG()
结合 GROUP BY
来从更多的维度计算平均成绩。
-
按照科目计算平均成绩
SELECT subject, AVG(score) FROM student_score GROUP BY subject;
+---------+------------+ | subject | AVG(score) | +---------+------------+ | Math | 81.3333 | | English | 94.6667 | +---------+------------+
这里,MySQL 会根据
GROUP BY subject
首先按照subject
将结果集分组,然后在每个组内再执行AVG(score)
。 -
按照人计算平均成绩
SELECT name, AVG(score) FROM student_score GROUP BY name;
+------+------------+ | name | AVG(score) | +------+------------+ | Tom | 85.0000 | | Jim | 90.0000 | | Tim | 89.0000 | +------+------------+
这里,MySQL 会根据
GROUP BY name
首先按照name
将结果集分组,然后在每个组内再执行AVG(score)
。
AVG()
结合子查询
如果我们想要查询成绩在平均线以上的行,我们可以使用以下 SQL 语句:
SELECT *
FROM student_score
WHERE score > (
SELECT AVG(score)
FROM student_score
);
+----+------+---------+-------+
| id | name | subject | score |
+----+------+---------+-------+
| 2 | Tom | English | 90 |
| 4 | Jim | English | 96 |
| 6 | Tim | English | 98 |
+----+------+---------+-------+
注意,我们这里通过以下子查询语句查询出平均成绩:
SELECT AVG(score)
FROM student_score