使用 DAvg 函数可以计算特定记录集(一个域)内一组值的平均值。可以在 Visual Basic 代码、宏、查询表达式或计算控件中使用 DAvg 函数。
例如,可以在选择查询的运费字段所对应的条件行中使用 DAvg 函数,来限制返回运费超过平均值以上的记录。或者在计算控件中使用包含 DAvg 函数的表达式,在新订单值旁边显示旧订单的平均值。
DAvg(expr, domain, [criteria])
DAvg 函数具有以下参数:
参数 |
说明 |
expr |
一个表达式,代表要计算其平均值的数值数据字段。可以是用来标识表或查询中字段的字符串表达式,也可以是对该字段上的数据执行计算的表达式。在 expr 中可以包括表中字段的名称、窗体上的控件、常量或函数。如果 expr 包含函数,那么它可以是内置的,也可以是用户定义的,但不能是另一个域聚合函数或 SQL 聚合函数。 |
domain |
字符串表达式,代表组成该域的记录集。可以是表名称或不需要参数的查询名称。 |
criteria |
可选的字符串表达式,用于限制 Davg 函数执行的数据范围。例如,criteria 通常等价于 SQL 表达式中的 WHERE 子句,只是不含 WHERE 关键字。如果忽略 criteria,DAvg 函数将对整个域计算 expr。任何包含在 criteria 中的字段必须同时也是 domain 中的字段,否则 DAvg 函数将返回 Null。 |
包含 Null 值的记录不能在平均值的计算中使用。
无论是在宏、模块、查询表达式还是在计算控件中使用 DAvg 函数,都必须仔细地构造 criteria 参数,以确保能够正确地进行计算。
在查询的“条件”行中可以使用 DAvg 函数来指定条件。例如,要查看所有定购数量在平均订购量以上的产品列表,可以基于“Orders”、“Order Details”和“Products”表创建一个查询,包含“Product Name”和“Quantity”字段,并在“Quantity”字段下的“条件”行中加入以下表达式:
>DAvg("[Quantity]", "Orders")
在查询的计算字段表达式中,或更新查询中“更新到”行中的计算字段表达式中,也可以使用 DAvg 函数。
注释 在总计查询的计算字段表达式中,既可以使用 DAvg 函数,也可以使用 Avg 函数。如果使用 DAvg 函数,将在数据分组之前计算平均值。如果使用 DAvg 函数,则在数据分组之后计算字段表达式的平均值。
当需要指定条件来限制 DAvg 函数执行的数据范围时,应在计算控件中使用 DAvg 函数。例如,要显示到 California 的运费的平均值,应将文本框的 ControlSource 属性设为如下表达式:
=DAvg("[Freight]", "Orders", "[ShipRegion] = 'CA'")
如果只对所有 domain 中的记录计算平均值,则可使用 Avg 函数。
如果要显示的字段不在窗体的基础记录源中时,可以在模块或宏中,或者窗体上的计算控件中,使用 DAvg 函数。例如,有一个基于“订单”表的窗体,希望包含“订单明细”表中的“数量”字段,以显示按特定客户排序的项目平均值,可以使用 DAvg 函数来执行这项计算并在窗体中显示该数据。
提示
? | 在计算控件中使用 DAvg 函数时,有时需要将控件放在窗体页眉或页脚中,以便该控件的值在每次移动到新记录时不必重新计算。 |
? | 如果 expr 所源于的字段数据类型为数字,则 DAvg 函数将返回 Double 数据类型。如果在计算控件中使用 DAvg 函数,可在表达式中包含数据类型转换函数,以提高性能。 |
? | 虽然使用 DAvg 函数可以确定外部表字段的数据平均值,但是通过创建含有所有需要字段的查询,然后将窗体或报表建立在这个查询的基础上,效率将更高。 |
注释 当使用此函数时,不包括对 domain 记录未保存的更改。如果希望 DAvg 函数基于更改后的值,必须首先保存更改,方法是:单击“记录”菜单中的“保存记录”、将焦点移动到另一条记录,或使用 Update 方法。
下列函数返回特定日期或特定日期以后已发订货的平均运费。域为“Orders”表。条件参数根据给定的国家/地区和发货日期来限制生成的记录集。请注意,关键字 AND 包含在字符串内,用于分隔条件参数内的多个字段。包含在 DAvg 函数计算内的所有记录都将满足这两个条件。
Public Function AvgFreightCost(ByVal strCountry As String, _
ByVal dteShipDate As Date) As Double
AvgFreightCost = DAvg("[Freight]", "Orders", _
"[ShipCountry] = '" & strCountry & _
"'AND [ShippedDate] >= #" & dteShipDate & "#")
End Function
若要调用该函数,请在“立即”窗口中使用下列代码行:
:AvgFreightCost "UK", #1/1/96#