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.