W tym wpisie chciałbym pokrótce przedstawić działanie klauzuli Group by. Klauzula ta służy jak sama nazwa wskazuje do grupowania danych. Prosty przykład, w tabeli posiadasz dwie grupy towarów, w jaki sposób wydobyć sumaryczną sprzedaż każdej z nich? Wystarczy użyć klauzuli Group by.
SQL Group by Nieco teorii…
Poniżej jak zawsze schemat, w którym zobaczysz w jaki sposób musisz zawsze korzystać z omawianej w tym wpisie klauzuli.
1 2 3 4 5 6 7 8 |
SELECT kolumna_1, funkcja_agregująca( kolumna_2) FROM nazwa_tabeli GROUP BY kolumna _1; |
Konstrukcja jest w miarę prosta. Musisz wybrać kolumny z tabeli, w jednej należy użyć funkcji agregującej (w tym przypadku dla ułatwienia będzie to SUM()), o funkcjach agregujących więcej dowiesz się w poprzednim wpisie. Dzięki temu w tle zostanie przygotowany zestaw danych, które klauzula Group by wyświetli w sposób pogrupowany.
Przykłady, przykłady…
Zacznij od prostego przykładu, w którym z tabeli payment pobierzesz pogrupowane dane zawierające customer_id, dzięki czemu zamiast powtarzających się wyników z customer_id otrzymasz tylko pojedyncze wystąpienie numeru klienta. Dla łatwiejszego przeglądu możesz dodać na końcu klauzule Order by, aby posortować dane rosnąco.
1 2 3 4 5 6 7 8 |
SELECT customer_id FROM payment GROUP BY customer_id ORDER BY customer_id; |
Kolejnym przykładem wykorzystania Group by jest przypisanie kwot zamówień do id klienta. Funkcja agregująca SUM() pozwoli na spięcie wszystkich kwot zamówień w jedną wartość oraz przypisze ją do konkretnego klienta.
1 2 3 4 5 6 7 8 9 |
SELECT customer_id, SUM(amount) FROM payment GROUP BY customer_id ORDER BY customer_id |
Kolejnym przykładem, który warto wykonać jest zapytanie, które policzy liczbę przetworzonych zamówień przez każdego z dwóch pracowników naszej firmy.
1 2 3 4 5 6 7 |
SELECT staff_id, COUNT (payment_id) FROM payment GROUP BY staff_id; |
Możliwe jest również użycie wielu kolumn z klauzulą Order by.
1 2 3 4 5 6 7 8 9 10 11 |
SELECT customer_id, staff_id, SUM(amount) FROM payment GROUP BY staff_id, customer_id ORDER BY customer_id; |
Ostatnim przykładem jest prosty raport, który pozwoli nam na uzyskanie informacji na temat wpływu pieniędzy według dat.
1 2 3 4 5 6 7 |
SELECT DATE(payment_date) AS paid_date, SUM(amount) AS sum FROM payment GROUP BY DATE(payment_date); |
W kolejnym wpisie pokażę użycie klauzuli Having, która jest nieodzowna w wielu przypadkach zaraz po klauzuli Group by.
Dziękuję Ci, za poświęcony czas na przeczytanie tego artykułu. Jeśli był on dla Ciebie przydatny, to gorąco zachęcam Cię do zapisania się na mój newsletter, jeżeli jeszcze Cię tam nie ma. Proszę Cię także o “polubienie” mojego bloga na Facebooku oraz kanału na YouTube – pomoże mi to dotrzeć do nowych odbiorców. Raz w tygodniu (niedziela punkt 17.00) otrzymasz powiadomienia o nowych artykułach / projektach zanim staną się publiczne. Możesz również pozostawić całkowicie anonimowy pomysł na wpis/nagranie.
Link do formularza tutaj: https://beitadmin.pl/pomysly
Pozostaw również komentarz lub napisz do mnie wiadomość odpisuję na każdą, jeżeli Masz jakieś pytania:).