Kurs PostgreSQL 11 – Group By CZ.22

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.

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.

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.

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.

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.

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.

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:).

Dodaj komentarz

beitadmin.pl - Droga Administratora IT