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.