MySQL Agrupar por con función de conteo
-
Sintaxis
GROUP BY
en MySQL -
GROUP BY
y funciones agregadas en MySQL -
Cláusula
GROUP BY
yHAVING
en MySQL -
GROUP BY Count()
en múltiples columnas en MySQL
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.
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:
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.
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:
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í:
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.
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.
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.