Problema:
Você deseja agrupar seus dados por duas colunas para poder contar algumas estatísticas.
Exemplo:
Na
order tabela, você tem as colunas order_date , product_id , customer_id e number . Você gostaria de contar o número de produtos comprados por cada cliente a cada dia. O
order tabela fica assim:| order_date | product_id | customer_id | 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 |
Solução:
SELECT order_date, customer_id, SUM(number) AS products_number FROM order
O resultado é:
| order_date | customer_id | products_number |
|---|---|---|
| 26/11/2020 | 3 | 2 |
| 2020-11-27 | 3 | 1 |
| 2020-11-26 | 2 | 12 |
| 2020-11-25 | 1 | 4 |
| 2020-11-26 | 1 | 2 |
Discussão:
Para agrupar por duas colunas, basta usar
GROUP BY com duas colunas. Os nomes das colunas devem ser listados após o GROUP BY palavra-chave e separados por vírgula. Os grupos serão criados com base nos valores de ambas as colunas; para cada par de valores, um grupo separado é criado (por exemplo, ('2020-11-25', 1) ). Observe a tabela abaixo, onde cada grupo é apresentado em uma cor diferente:| order_date | customer_id | product_id | número |
|---|---|---|---|
| 2020-11-25 | 1 | 7 | 1 |
| 2020-11-25 | 1 | 12 | 3 |
| 2020-11-26 | 1 | 53 | 2 |
| 26/11/2020 | 2 | 1 | 4 |
| 26/11/2020 | 2 | 3 | 1 |
| 26/11/2020 | 2 | 16 | 7 |
| 2020-11-26 | 3 | 3 | 2 |
| 2020-11-27 | 3 | 6 | 1 |
Se uma ou ambas as colunas tiverem
NULL valores, esses valores são tratados como um grupo separado (por exemplo, ('2020-11-26', NULL) , (NULL, 5) ou (NULL, NULL) ). Por outro lado, se houver
NULLs em uma coluna na qual aplicamos uma função agregada, o NULL os valores são simplesmente omitidos. (Neste exemplo, a função agregada é SUM() e a coluna é number ). Se tivéssemos os valores numéricos 2 , 1 e NULL para um dos grupos, o SUM(number) seria igual a 3 (2 e 1 são adicionados juntos, e NULL é omitido.) Da mesma forma, você pode agrupar por qualquer número de colunas - basta escrever os nomes das colunas no
GROUP BY cláusula e separe-os com vírgulas.