数据分析中,一项常见需求是找出数值列的平均值。无论你需要订单总额的平均值、客户满意度的平均分数,还是典型的会话时长,AVG()函数都是完成这项工作的工具。它计算一组数字的算术平均值。AVG()的基本用法AVG()函数通过将指定列中所有非空数值求和,然后除以这些非空值的计数来工作。基本语法很简单:SELECT AVG(column_name) FROM table_name;我们来看一个包含客户购买信息的orders表:订单ID客户ID订单日期订单总额10152023-10-26150.75102122023-10-2685.0010352023-10-27210.50104212023-10-27NULL105122023-10-28110.25为了找出所有已完成订单的平均order_total (忽略总额为NULL的订单),你可以这样写:SELECT AVG(order_total) FROM orders;数据库执行此计算:$(150.75 + 85.00 + 210.50 + 110.25) / 4 = 556.50 / 4 = 139.125$。结果可能如下所示:平均值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订单日期订单总额102122023-10-2685.00105122023-10-28110.25然后,它计算这些行的平均order_total:$(85.00 + 110.25) / 2 = 195.25 / 2 = 97.625$。结果是:客户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子句同时计算多个组的平均值。