趋近智
数据分析中,一项常见需求是找出数值列的平均值。无论你需要订单总额的平均值、客户满意度的平均分数,还是典型的会话时长,AVG()函数都是完成这项工作的工具。它计算一组数字的算术平均值。
AVG()的基本用法AVG()函数通过将指定列中所有非空数值求和,然后除以这些非空值的计数来工作。
基本语法很简单:
SELECT AVG(column_name)
FROM table_name;
我们来看一个包含客户购买信息的orders表:
| 订单ID | 客户ID | 订单日期 | 订单总额 |
|---|---|---|---|
| 101 | 5 | 2023-10-26 | 150.75 |
| 102 | 12 | 2023-10-26 | 85.00 |
| 103 | 5 | 2023-10-27 | 210.50 |
| 104 | 21 | 2023-10-27 | NULL |
| 105 | 12 | 2023-10-28 | 110.25 |
为了找出所有已完成订单的平均order_total (忽略总额为NULL的订单),你可以这样写:
SELECT AVG(order_total)
FROM orders;
数据库执行此计算:。
结果可能如下所示:
| 平均值 |
|---|
| 139.125000 |
小数位的确切数量可能不同,这取决于数据库系统和order_total列的数据类型。
AVG()中别名的使用与其他函数和列一样,默认的输出列名 (通常是avg或类似名称) 可能不够有描述性。你可以使用AS关键字通过别名指定一个更有意义的名称:
SELECT AVG(order_total) AS average_order_value
FROM orders;
这个查询会产生一个更清晰的结果:
| 平均订单价值 |
|---|
| 139.125000 |
WHERE计算子集的平均值通常,你只会想计算数据中特定部分的平均值。你可以将AVG()与WHERE子句结合使用,在计算平均值之前筛选行。
例如,要找出customer_id为12的客户的平均订单总额:
SELECT AVG(order_total) AS avg_order_total_cust12
FROM orders
WHERE customer_id = 12;
此查询首先筛选orders表,以仅包含customer_id为12的行:
| 订单ID | 客户ID | 订单日期 | 订单总额 |
|---|---|---|---|
| 102 | 12 | 2023-10-26 | 85.00 |
| 105 | 12 | 2023-10-28 | 110.25 |
然后,它计算这些行的平均order_total:。
结果是:
| 客户12的平均订单总额 |
|---|
| 97.625000 |
NULL值的重要说明记住AVG()这一点很重要,与大多数聚合函数一样 (除了COUNT(*)), 它完全忽略NULL值。它计算非NULL值的总和,并除以非NULL值的计数。在我们最初的例子中,order_id为104的行被排除在求和和计数之外。
请注意这种行为。如果NULL在你的数据环境中实际上表示零,那么简单地使用AVG()会给出非零值的平均值,这可能不是你想要的。如果你需要在平均值计算中将NULL视为零,你通常需要使用一个函数在聚合之前将NULL替换为0,但这是一种更高级的技巧。目前,只需记住AVG()计算的是现有值的平均值。
AVG()函数是为数值数据类型设计的,例如INTEGER、DECIMAL、FLOAT、NUMERIC等。尝试在非数值列 (如文本或日期) 上使用AVG()通常会导致错误。
计算平均值是数据汇总的一个基本步骤。AVG()提供了一种直接方法来计算针对整个列或由WHERE子句定义的特定子集的平均值。稍后,你将了解如何使用GROUP BY子句同时计算多个组的平均值。
这部分内容有帮助吗?
© 2026 ApX Machine Learning用心打造