Предложение 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 

См. также

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.