Предложение GROUP BY (Microsoft Access SQL)
Область применения: Access 2013 | Access 2016
Объединяет записи с одинаковыми значениями в указанном списке полей в одну запись. Сводное значение создается для каждой записи, если в инструкцию SELECT включена агрегатная функция SQL, например Sum или Count.
Синтаксис
SELECT fieldlist FROM table WHERE criteria [GROUP BY groupfieldlist ]
Инструкция SELECT, содержащая предложение GROUP BY, состоит из следующих частей:
Part | Описание |
---|---|
fieldlist | Имя извлекаемого поля или полей вместе с псевдонимами имени полей, агрегатными функциями SQL, предикатами выбора (ALL, DISTINCTROW или TOP) или другими параметрами инструкции SELECT. |
table | Имя таблицы, из которой извлекаются записи. Дополнительные сведения см. в предложении FROM . |
criteria | Критерии выбора. Если инструкция содержит предложение WHERE , ядро СУБД Microsoft Access группируют значения после применения условий WHERE к записям. |
groupfieldlist | Имена до 10 полей, используемых для группирования записей. Порядок имен полей в списке groupfieldlist определяет уровни группировки от верхнего до самого низкого уровня группировки. |
Замечания
GROUP BY является необязательным.
Суммарные значения опущены, если в инструкции SELECT нет агрегатной функции SQL.
Значения NULL в полях GROUP BY группируются и не опускаются. Однако значения NULL не вычисляются ни в одной агрегатной функции SQL.
Используйте предложение WHERE, чтобы исключить строки, которые не нужно группировать, и используйте предложение HAVING для фильтрации записей после их группировки.
Если оно не содержит данные memo или объекта OLE, поле в списке полей GROUP BY может ссылаться на любое поле в любой таблице, указанной в предложении FROM, даже если поле не включено в инструкцию SELECT при условии, что инструкция SELECT содержит по крайней мере одну агрегатную функцию SQL. Ядро СУБД Microsoft® Jet не может группироваться в полях Memo или OLE Object.
Все поля в списке полей 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
Для каждой уникальной должности в этом примере вычисляется число сотрудников в Вашингтоне, имеющих эту должность.
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
См. также
- Форум для разработчиков Access
- Помощь при работе с Access на support.office.com
- Форумы Access на UtterAccess
- Справочный центр (FMS) для разработки и VBA программирования для Access
- Публикации по Access на StackOverflow
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.