Group by en SQL Server

Al requerir agrupar registros de una consulta nos viene la mente la cláusula Group by que tiene disponible SQL Server; que hace la función de los ciclos o subqueries.

La sintaxis básica de esta cláusula es la siguiente:

SELECT columnas
FROM NombreTabla
GROUP BY NombreColumna1, NombreColumna2,...;

Aunque parezca algo muy simple, ahora que lo veamos en funcionamiento te darás cuenta lo útil que es.

Funcionamiento de group by en SQL

Para los ejemplos de funcionamiento, utilizaremos la tabla de empleados de la base de datos Northwind.

Tabla de SQL Server

En el primer ejemplo resolveremos el siguiente problema: Agrupar las ciudades por país.

SELECT [EmployeeID],[LastName],[FirstName],[City],[Country]
FROM [Northwind].[dbo].[Employees]
GROUP BY [Country];

Al ejecutar este código aparecerá el siguiente error de salida.

Error de Group by

Te preguntaras porque, si estas siguiente la sintaxis correctamente; este error se genera debido a que las columnas de salida deben estar agregadas en el group by (a menos que sean algunas funciones). Por lo tanto, para evitar el error debemos de modificar la consulta de la siguiente manera.

SELECT [City],[Country]
FROM [Northwind].[dbo].[Employees]
GROUP BY [City],[Country];

Colocamos las dos columnas del resultado en la cláusula group by, lo que nos da el siguiente resultado.

Group by en SQL Server

Lo que sucedió fue que en el resultado aparecen ciudades distintas en cada país, si una ciudad estaba mas de una ves en un mismo país en el resultado solo se tomara una.

Podría interesarte Procedimientos almacenados en SQL Server  

Como mencionamos anteriormente, podemos agregar alguna función en el resultado de la consulta; esta es la parte más interesante de esta cláusula.

Para mostrar este ejemplo resolvamos lo siguiente: Obtener el número de empleados por país.

SELECT [Country], COUNT(*) AS 'Total'
FROM [Northwind].[dbo].[Employees]
GROUP BY [Country];

Lo que haca la consulta es contar el número de veces que aparece el país mediante la función count(); lo que nos genera el resultado siguiente.

Group by con funcion en SQL Server

Esta es la forma más eficiente de obtener este tipo de valores, otra manera seria mediante una subconsulta; por rendimiento cuando existen miles de registros se recomienda group by.

Vimos algunos posibles usos; sin embargo, le puedes agregar más clausulas para consultas más complejas como Inners, where, order by, etc.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *