MySQL Agrupar por con función de conteo

Abdul Basit 15 febrero 2024
  1. Sintaxis GROUP BY en MySQL
  2. GROUP BY y funciones agregadas en MySQL
  3. Cláusula GROUP BY y HAVING en MySQL
  4. GROUP BY Count() en múltiples columnas en MySQL
MySQL Agrupar por con función de conteo

Este tutorial discutirá la cláusula SQL GROUP BY junto con las funciones agregadas usando MySQL.

La cláusula GROUP BY se usa a menudo junto con algunas funciones agregadas como COUNT(), SUM(), MIN(), MAX() y PROMEDIO().

Sintaxis GROUP BY en MySQL

En MySQL, la siguiente sintaxis se usa para agrupar la vista resultante por algunos nombres de columna.

SELECT column_name(s)
FROM table_name
WHERE condition
GROUP BY column_name(s);

GROUP BY y funciones agregadas en MySQL

En SQL, la cláusula GROUP BY se puede usar con la función de agregado para contar, sumar o agregar el número de registros contra ciertas condiciones.

Ejemplo 1: Supongamos que tenemos una tabla PEDIDOS y queremos contar el número de pedidos agrupados por fecha de pedidos.

Tabla de pedidos

Podemos lograr esto usando la siguiente consulta.

SELECT COUNT(OrderID) as Count, OrderDate
FROM Orders
GROUP BY OrderDate;

La consulta anterior recuperará todos los pedidos agrupándolos por su OrderDate y mostrará un solo registro por OrderDate. Por lo tanto, cada registro en la vista resultante contendrá OrderDate y el recuento de todos los OrderIDs en esta fecha.

El resultado de la consulta será como:

Pedidos por Fecha

Ejemplo 2: A continuación se muestra otro ejemplo para encontrar el salario total de cada empleado. Supongamos que estamos utilizando la siguiente tabla para recuperar los resultados.

Tabla de empleados

SELECT e.NAME, SUM(e.SALARY)
FROM Employee e
GROUP BY e.NAME;

En la consulta anterior, primero seleccionamos todos los NOMBRES de la tabla y luego aplicamos la función SUMA para calcular la suma de salarios contra cada nombre. Por tanto, sólo debe existir un único registro correspondiente a cada Nombre.

La salida de la consulta debe ser como:

Grupo de Salario Total de Salida por Nombres

Cláusula GROUP BY y HAVING en MySQL

La cláusula HAVING se puede usar junto con la cláusula GROUP BY para filtrar aún más los resultados en función de condiciones específicas, como lo demuestra la siguiente consulta.

SELECT e.NAME, SUM(e.SALARY)
FROM Employee e
GROUP BY e.NAME
HAVING SUM(SALARY)>44000;

Esta consulta es la misma que la anterior; sin embargo, la única diferencia es que hemos aplicado la cláusula HAVING para filtrar aún más el salario e incluir solo aquellos registros con una suma de salario final superior a 44000.

El resultado de esta consulta se ve así:

Nombres de salida que tienen un salario superior a 44000

GROUP BY Count() en múltiples columnas en MySQL

La función agregada COUNT() se puede usar junto con la cláusula GROUP BY que tiene varias columnas. En este caso, los resultados se agrupan primero por la primera columna, luego por la siguiente y así sucesivamente para las demás columnas.

Después de eso, todas las filas con los mismos valores agrupados se cuentan y se muestran como una sola.

Supongamos que queremos contar los pedidos de un cliente en particular en una fecha específica de la siguiente tabla.

Tabla de pedidos

Podemos hacerlo usando la siguiente consulta.

Select CustomerId, OrderDate, COUNT(OrderId) as OrdersByCustomerByDate
FROM ORDERS
GROUP BY CustomerId, OrderDate;

Todos los pedidos se agrupan primero por CustomerId y luego por OrderDate. Después de eso, todos los registros en los que CustomerId y OrderDate son iguales se cuentan y se muestran como un solo registro, como se muestra en el resultado de la consulta a continuación.

Orden de salida por cliente por fecha

El cliente con $CustomerId = 1$ tiene tres pedidos: uno en 30-Jul-2022 y dos en la fecha 31-Jul-2022.

Los dos pedidos de este cliente para el 31 de julio de 2022 se agregan en la segunda fila del resultado de la consulta con $OrdersByCustomerByDate = 2$. Lo mismo se aplica al resto de los registros.