Problém:
Chcete seskupit data do dvou sloupců, abyste mohli počítat nějaké statistiky.
Příklad:
V order tabulky, máte sloupce order_date , product_id , customer_id a number . Chtěli byste spočítat počet produktů zakoupených každým zákazníkem každý den.
order tabulka vypadá takto:
| order_date | id_produktu | customer_id | číslo |
|---|---|---|---|
| 25. 11. 2020 | 7 | 1 | 1 |
| 25. 11. 2020 | 12 | 1 | 3 |
| 26. 11. 2020 | 53 | 1 | 2 |
| 26. 11. 2020 | 1 | 2 | 4 |
| 26. 11. 2020 | 3 | 2 | 1 |
| 26. 11. 2020 | 16 | 2 | 7 |
| 26. 11. 2020 | 3 | 3 | 2 |
| 27. 11. 2020 | 6 | 3 | 1 |
Řešení:
SELECT order_date, customer_id, SUM(number) AS products_number FROM order
Výsledek je:
| order_date | customer_id | číslo_produktů |
|---|---|---|
| 26. 11. 2020 | 3 | 2 |
| 27. 11. 2020 | 3 | 1 |
| 26. 11. 2020 | 2 | 12 |
| 25. 11. 2020 | 1 | 4 |
| 26. 11. 2020 | 1 | 2 |
Diskuse:
Chcete-li seskupit podle dvou sloupců, jednoduše použijte GROUP BY se dvěma sloupci. Názvy sloupců by měly být uvedeny za GROUP BY klíčové slovo a oddělené čárkou. Skupiny budou vytvořeny na základě hodnot obou sloupců; pro každý pár hodnot je vytvořena samostatná skupina (např. ('2020-11-25', 1) ). Podívejte se na tabulku níže, kde je každá skupina zobrazena jinou barvou:
| order_date | customer_id | id_produktu | číslo |
|---|---|---|---|
| 25. 11. 2020 | 1 | 7 | 1 |
| 25. 11. 2020 | 1 | 12 | 3 |
| 26. 11. 2020 | 1 | 53 | 2 |
| 26. 11. 2020 | 2 | 1 | 4 |
| 26. 11. 2020 | 2 | 3 | 1 |
| 26. 11. 2020 | 2 | 16 | 7 |
| 26. 11. 2020 | 3 | 3 | 2 |
| 27. 11. 2020 | 3 | 6 | 1 |
Pokud jeden nebo oba sloupce mají NULLs hodnoty, jsou tyto hodnoty považovány za samostatnou skupinu (např. ('2020-11-26', NULL) , (NULL, 5) nebo (NULL, NULL) ).
Na druhou stranu, pokud existují NULLs ve sloupci, na který aplikujeme agregační funkci, NULLs hodnoty jsou jednoduše vynechány. (V tomto příkladu je agregační funkce SUM() a sloupec je number ). Pokud bychom měli číselné hodnoty 2 , 1 a NULL pro jednu ze skupin SUM(number) by se rovnalo 3 (2 a 1 se sčítají a NULLs je vynecháno.)
Podobně můžete seskupit podle libovolného počtu sloupců – stačí napsat názvy sloupců do GROUP BY klauzule a oddělte je čárkami.