Problema:
Desea agrupar sus datos en dos columnas para poder contar algunas estadísticas.
Ejemplo:
En el order
tabla, tienes las columnas order_date
, product_id
, customer_id
y number
. Le gustaría contar la cantidad de productos comprados por cada cliente cada día.
El order
la tabla se ve así:
fecha_pedido | id_producto | id_cliente | número |
---|---|---|---|
2020-11-25 | 7 | 1 | 1 |
2020-11-25 | 12 | 1 | 3 |
2020-11-26 | 53 | 1 | 2 |
2020-11-26 | 1 | 2 | 4 |
2020-11-26 | 3 | 2 | 1 |
2020-11-26 | 16 | 2 | 7 |
2020-11-26 | 3 | 3 | 2 |
2020-11-27 | 6 | 3 | 1 |
Solución:
SELECT order_date, customer_id, SUM(number) AS products_number FROM order
El resultado es:
fecha_pedido | id_cliente | número_productos |
---|---|---|
2020-11-26 | 3 | 2 |
2020-11-27 | 3 | 1 |
2020-11-26 | 2 | 12 |
2020-11-25 | 1 | 4 |
2020-11-26 | 1 | 2 |
Discusión:
Para agrupar por dos columnas, simplemente use GROUP BY
con dos columnas. Los nombres de las columnas deben aparecer después de GROUP BY
palabra clave y separados por una coma. Los grupos se crearán en función de los valores de ambas columnas; para cada par de valores, se crea un grupo separado (por ejemplo, ('2020-11-25', 1)
). Mire la tabla a continuación, donde cada grupo se presenta en un color diferente:
fecha_pedido | id_cliente | id_producto | número |
---|---|---|---|
2020-11-25 | 1 | 7 | 1 |
2020-11-25 | 1 | 12 | 3 |
2020-11-26 | 1 | 53 | 2 |
2020-11-26 | 2 | 1 | 4 |
2020-11-26 | 2 | 3 | 1 |
2020-11-26 | 2 | 16 | 7 |
2020-11-26 | 3 | 3 | 2 |
2020-11-27 | 3 | 6 | 1 |
Si una o ambas columnas tienen NULL
valores, estos valores se tratan como un grupo separado (por ejemplo, ('2020-11-26', NULL)
, (NULL, 5)
o (NULL, NULL)
).
Por otro lado, si hay NULLs
en una columna en la que aplicamos una función agregada, el NULL
simplemente se omiten los valores. (En este ejemplo, la función agregada es SUM()
y la columna es number
). Si tuviéramos los valores numéricos 2 , 1 y NULO para uno de los grupos, el SUM(number)
sería igual a 3
(2
y 1
se suman y NULL
se omite.)
Del mismo modo, puede agrupar por cualquier número de columnas; simplemente escriba los nombres de las columnas en GROUP BY
cláusula y sepárelas con comas.