MICROSOFT Access SQL) (GROUP BY 子句
适用于:Access 2013 | Access 2016
将指定字段列表中具有相同值的记录组合成一个记录。 如果在 SELECT 语句中包含 SQL 聚合函数(如 Sum 或 Count),则为每条记录创建一个汇总值。
语法
SELECT fieldlist FROM table WHERE criteria [GROUP BY groupfieldlist ]
包含了 GROUP BY 子句的 SELECT 语句具有以下部分:
Part | 说明 |
---|---|
fieldlist | 要检索的字段的名称,以及任何字段名别名、SQL 聚合函数、选择谓词(ALL、DISTINCT、DISTINCTROW 或 TOP)或其他 SELECT 语句选项。 |
table | 要从中检索记录的表的名称。 有关详细信息,请参阅 FROM 子句。 |
criteria | 选择条件。 如果语句包含 WHERE 子句,那么 Microsoft Access 数据库引擎将在向记录应用 WHERE 条件后对值进行分组。 |
groupfieldlist | 最多 10 个用于分组记录的字段的名称。 在 groupfieldlist 中的字段名称的顺序确定了从最高到最低分组级别方法的分组级别。 |
备注
GROUP BY 是可选的。
如果在 SELECT 语句中没有 SQL 聚合函数,将省略汇总值。
在 GROUP BY 字段中的 Null 值会被分组,不会被忽略。 但是,任何 SQL 聚合函数都不会计算 Null。
使用 WHERE 子句排除不希望分组的行,并使用 HAVING 子句在记录分组后筛选记录。
假定 SELECT 语句至少包含一个 SQL 聚合函数,那么,除非 GROUP BY 字段列表中的某个字段包含 Memo 或 OLE 对象数据,否则该字段可以引用 FROM 子句列出的任何表中的任何字段,即使该字段并不包含在 SELECT 语句中。 Microsoft® Jet 数据库引擎不能对 Memo 或 OLE 对象字段进行分组。
在 SELECT 字段列表中的所有字段必须包含于 GROUP BY 子句中,或作为参数包含于 SQL 聚合函数中。
示例
以下示例创建一个列表,列出各项唯一的职务以及担任每项职务的雇员数。 它调用 EnumFields 过程,您可以在 SELECT 语句示例中找到该过程。
Sub GroupByX1()
Dim dbs As Database, rst As Recordset
' Modify this line to include the path to Northwind
' on your computer.
Set dbs = OpenDatabase("Northwind.mdb")
' For each title, count the number of employees
' with that title.
Set rst = dbs.OpenRecordset("SELECT Title, " _
& "Count([Title]) AS Tally " _
& "FROM Employees GROUP BY Title;")
' Populate the Recordset.
rst.MoveLast
' Call EnumFields to print the contents of the
' Recordset. Pass the Recordset object and desired
' field width.
EnumFields rst, 25
dbs.Close
End Sub
对于每项唯一职务,以下示例计算 Washington 地区担任该项职务的雇员数。
Sub GroupByX2()
Dim dbs As Database, rst As Recordset
' Modify this line to include the path to Northwind
' on your computer.
Set dbs = OpenDatabase("Northwind.mdb")
' For each title, count the number of employees
' with that title. Only include employees in the
' Washington region.
Set rst = dbs.OpenRecordset("SELECT Title, " _
& "Count(Title) AS Tally " _
& "FROM Employees WHERE Region = 'WA' " _
& "GROUP BY Title;")
' Populate the Recordset.
rst.MoveLast
' Call EnumFields to print the contents of the
' Recordset. Pass the Recordset object and desired
' field width.
EnumFields rst, 25
dbs.Close
End Sub
另请参阅
- 访问开发人员论坛
- 访问 support.office.com 上的帮助
- 访问 UtterAccess 上的论坛
- 访问开发人员和 VBA 编程帮助中心 (FMS)
- 访问 StackOverflow 上的帖子
支持和反馈
有关于 Office VBA 或本文档的疑问或反馈? 请参阅 Office VBA 支持和反馈,获取有关如何接收支持和提供反馈的指南。