Problem:
Chcesz pogrupować swoje dane według dwóch kolumn, aby móc policzyć trochę statystyk.
Przykład:
W order tabela, masz kolumny order_date , product_id , customer_id i number . Chciałbyś policzyć liczbę produktów kupionych przez każdego klienta każdego dnia.
order tabela wygląda tak:
| data_zamówienia | product_id | identyfikator_klienta | liczba |
|---|---|---|---|
| 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 |
Rozwiązanie:
SELECT order_date, customer_id, SUM(number) AS products_number FROM order
Wynik:
| data_zamówienia | identyfikator_klienta | products_number |
|---|---|---|
| 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 |
Dyskusja:
Aby pogrupować według dwóch kolumn, po prostu użyj GROUP BY z dwiema kolumnami. Nazwy kolumn powinny być wymienione po GROUP BY słowa kluczowego i oddzielone przecinkiem. Grupy zostaną utworzone na podstawie wartości obu kolumn; dla każdej pary wartości tworzona jest osobna grupa (np. ('2020-11-25', 1) ). Spójrz na poniższą tabelę, gdzie każda grupa jest przedstawiona w innym kolorze:
| data_zamówienia | identyfikator_klienta | product_id | liczba |
|---|---|---|---|
| 2020-11-25 | 1 | 7 | 1 |
| 25.11.2020 | 1 | 12 | 3 |
| 26-11-2020 | 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 |
Jeśli jedna lub obie kolumny mają NULLs wartości, te wartości są traktowane jako osobna grupa (np. ('2020-11-26', NULL) , (NULL, 5) lub (NULL, NULL) ).
Z drugiej strony, jeśli istnieją NULLs w kolumnie, na której stosujemy funkcję agregującą, NULLs wartości są po prostu pomijane. (W tym przykładzie funkcją agregującą jest SUM() a kolumna to number ). Gdybyśmy mieli wartości liczbowe 2 , 1 i NULL dla jednej z grup SUM(number) równałoby się 3 (2 i 1 są dodawane razem, a NULLs jest pominięty).
Podobnie możesz pogrupować według dowolnej liczby kolumn – po prostu wpisz nazwy kolumn w GROUP BY klauzuli i oddziel je przecinkami.