Cláusula GROUP BY (Microsoft Access SQL)

Se aplica a: Access 2013 | Access 2016

Combina registros con valores idénticos de la lista de campos especificada en un solo registro. Se crea un valor de resumen para cada registro si se incluye una función de agregado de SQL, por ejemplo Sum o Count, en la instrucción SELECT.

Sintaxis

SELECT fieldlist FROM table WHERE criteria [GROUP BY groupfieldlist ]

Una instrucción SELECT que contenga una cláusula GROUP BY consta de los siguientes elementos:

Parte Descripción
fieldlist Nombre del campo o campos que se recuperarán junto con los alias de nombre de campo, funciones de agregado de SQL, predicados de selección (ALL, DISTINCT, DISTINCTROW o TOP) u otras opciones de la instrucción SELECT.
table Nombre de la tabla en la que se recuperan los registros. Para obtener más información, vea la cláusula FROM.
criteria Criterios de selección. Si la instrucción incluye una cláusula WHERE, el motor de base de datos de Microsoft Access agrupa los valores después de aplicar las condiciones WHERE a los registros.
groupfieldlist Nombres de 10 campos como máximo para agrupar los registros. El orden de los nombres de campo en listaDeCamposDeGrupo determina los niveles de agrupamiento desde el nivel superior al nivel inferior de agrupamiento.

Comentarios

GROUP BY es opcional.

Los valores de resumen se omiten si no hay ninguna función de agregado de SQL en la instrucción SELECT.

Los valores Null de los campos GROUP BY se agrupan y no se omiten. Sin embargo, los valores Null no se evalúan en ninguna función de agregado de SQL.

Use la cláusula WHERE para excluir las filas que no desea agrupar y use la cláusula HAVING para filtrar los registros después de que se hayan agrupado.

Salvo que contenga datos de tipo Memo u Objeto OLE, un campo de la lista de campos GROUP BY puede hacer referencia a cualquier campo de una tabla enumerada en la cláusula FROM, incluso si el campo no se incluye en la instrucción SELECT, a condición de que la instrucción SELECT incluya al menos una función de agregado de SQL. El motor de base de datos Microsoft® Jet no puede agrupar por campos de tipo Memo u Objeto OLE.

Todos los campos de la lista de campos SELECT deben incluirse en la cláusula GROUP BY o incluirse como argumentos de una función de agregado de SQL.

Ejemplo:

En este ejemplo, se crea una lista de cargos únicos y el número de empleados que ostentan cada cargo. Llama al procedimiento EnumFields, que se incluye en el ejemplo de la instrucción 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 

Para cada cargo único, en este ejemplo se calcula el número de empleados en Washington que tienen dicho cargo.

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 

Vea también

Soporte técnico y comentarios

¿Tiene preguntas o comentarios sobre VBA para Office o esta documentación? Vea Soporte técnico y comentarios sobre VBA para Office para obtener ayuda sobre las formas en las que puede recibir soporte técnico y enviar comentarios.