MySQL - AVG() 函数
聚合通常被定义为将一组绑定在一起作为单个实体的对象进行处理;MySQL 提供了一组聚合函数,这些函数将表列中的所有实体视为一个单元执行操作。
MySQL AVG() 函数就是这样一个函数。此函数用于计算特定列/字段中值的平均值。在 MySQL 中使用 AVG() 函数时,必须注意以下几点:
AVG() 函数仅适用于数值数据类型的列。对于任何其他数据类型,结果集将包含 '0' 或 NULL。
如果表列中不存在值,此函数将返回 NULL。
如果列本身不存在,则会显示"未知列"错误。
如果使用 DISTINCT 关键字,此函数将计算并返回给定列中唯一值的平均值。
语法
以下是 MySQL AVG() 函数的语法 -
AVG(expr);
参数
此方法仅接受一个参数。如下所示:-
expr: 我们要计算平均值的列或表达式的名称。
返回值
此函数返回指定列或表达式的平均值。
示例
以下是一个简单的示例,演示了 MySQL AVG() 函数的用法。为此,我们首先使用 CREATE 语句创建一个名为 CUSTOMERS 的表,如下所示:-
CREATE TABLE CUSTOMERS ( ID INT AUTO_INCREMENT, NAME VARCHAR(20) NOT NULL, AGE INT NOT NULL, ADDRESS CHAR (25), SALARY DECIMAL (18, 2), PRIMARY KEY (ID) );
以下查询将 7 条记录添加到上面创建的表中 -
INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) VALUES (1, 'Ramesh', 32, 'Ahmedabad', 2000.00 ), (2, 'Khilan', 25, 'Delhi', 1500.00 ), (3, 'Kaushik', 23, 'Kota', 2000.00 ), (4, 'Chaitali', 25, 'Mumbai', 6500.00 ), (5, 'Hardik', 27, 'Bhopal', 8500.00 ), (6, 'Komal', 22, 'Hyderabad', 4500.00 ), (7, 'Muffy', 24, 'Indore', 10000.00 );
要验证记录是否已插入,请执行以下查询 -
Select * From CUSTOMERS;
以下是 CUSTOMERS 表 -
ID | NAME | AGE | ADDRESS | SALARY |
---|---|---|---|---|
1 | Ramesh | 32 | Ahmedabad | 2000.00 |
2 | Khilan | 25 | Delhi | 1500.00 |
3 | Kaushik | 23 | Kota | 2000.00 |
4 | Chaitali | 25 | Mumbai | 6500.00 |
5 | Hardik | 27 | Bhopal | 8500.00 |
6 | Komal | 22 | Hyderabad | 4500.00 |
7 | Muffy | 24 | Indore | 10000.00 |
现在,我们使用 MySQL AVG() 函数计算所有客户的平均工资 -
SELECT AVG(SALARY) From CUSTOMERS;
输出
这将产生以下结果 -
AVG(SALARY) |
---|
5000.000000 |
示例
我们还可以在子查询中使用 MySQL AVG() 函数来计算客户的平均工资。
以下查询从 'CUSTOMERS' 表中检索所有 'SALARY' 大于所有客户平均工资的行 -
SELECT * FROM CUSTOMERS WHERE SALARY > (SELECT AVG(SALARY) FROM CUSTOMERS);
输出
执行给定查询后,输出显示如下 -
ID | NAME | AGE | ADDRESS | SALARY |
---|---|---|---|---|
4 | Chaitali | 25 | Mumbai | 6500.00 |
5 | Hardik | 27 | Bhopal | 8500.00 |
7 | Muffy | 24 | Indore | 10000.00 |
示例
如果对不存在的行应用 AVG() 函数,则输出将显示 NULL 值。
假设之前的 CUSTOMERS 表,执行以下查询返回客户的平均工资 -
SELECT AVG(SALARY) FROM CUSTOMERS;
这将产生以下结果 -
AVG(SALARY) |
---|
5000.000000 |
现在,使用以下查询,我们将检索名为"Rahul"的客户的平均分数。但该表中没有"Rahul"的记录。在这种情况下,将返回 NULL 值。
SELECT AVG(SALARY) FROM CUSTOMERS WHERE NAME = 'Rahul';
输出
结果将为 NULL -
AVG(SALARY) |
---|
NULL |