POWRÓT NA STRONĘ SZKOŁY

Grupowanie danych

Jeżeli chcemy otrzymać na przykład liczbę wierszy spełniających określone kryteria albo np. obliczyć średnią wartość danego pola, to stosujemy odpowiednią funkcję MySQL. Kilka najczęściej stosowanych funkcji, pokazane jest poniżej w tabeli. Zastosowanie tych funkcji razem z klauzulą GROUP BY umożliwia wyodrębnienie grupy danych spełniających określone kryterium. Pokażemy to w ćwiczeniach, które będą wykonywane w oparciu o bazę ksiegarnia_internetowa, więc przypomnij sobie najpierw tabele tej bazy.

Niektóre funkcje łączące dane w MySQL
Nazwa Opis
AVG(kolumna) Oblicza średnią arytmetyczną w danej kolumnie
COUNT(kolumna) Oblicza liczbę niezerowych wartości w kolumnie
COUNT(DISTINCT kolumna) Oblicza liczbę różnych wartości w kolumnie
COUNT(*) Oblicza liczbę wierszy w tabeli
MIN(kolumna) lub MAX(kolumna) Oblicza najmniejszą lub największą wartość w kolumnie
STD(kolumna) lub STDDEV(kolumna) Oblicza odchylenie standardowe w kolumnie
SUM(kolumna) Oblicza sumę wartości w kolumnie

Ćwiczenie 4_2_7_1. Obliczenie średniej wartości zamówień w tabeli zamowienia

Zastosuj polecenie SQL:

SELECT AVG(wartosc)
FROM zamowienia;
Obliczenie średniej wartości zamówień w tabeli zamowienia
Rysunek 4_2_7_1. Obliczenie średniej wartości zamówień w tabeli zamowienia

Ćwiczenie 4_2_7_2. Obliczenie średnich wartości zamówień składanych przez poszczególnych klientów

Zastosuj polecenie SQL:

SELECT klient_id, AVG(wartosc)
FROM zamowienia
GROUP BY klient_id;
Obliczenie największej średniej wartości zamówień składanych przez poszczególnych klientów
Rysunek 4_2_7_2. Obliczenie średnich wartości zamówień składanych przez poszczególnych klientów

Porównaj ten wynik, z wynikiem uzyskanym w poprzednim ćwiczeniu. Klauzula grupująca GROUP BY powoduje grupowanie poszczególnych zamówień danego klienta. Zajrzyj to tabeli zamowienia. Klient o identyfikatorze klient_id równym 5, złożył dwa zamówienia: pierwsze o wartości 199,80 oraz drugie o wartości 120,34. Tak więc średnia wartość zamówień tego klienta wynosi (199,80 + 120,34)/2 = 160,07. Czy taką wartość znajdujemy jako wynik zapytania?

Ćwiczenie 4_2_7_3. Wyszukanie tylko tych klientów, których średnia wartość zamówień przekroczyła wartość 200 złotych

Zastosuj polecenie SQL:

SELECT klient_id, AVG(wartosc)
FROM zamowienia
GROUP BY klient_id
HAVING AVG(wartosc)>200;
Wyszukanie tylko tych klientów, których średnia wartość zamówień przekroczyła wartość 200 złotych
Rysunek 4_2_7_3. Wyszukanie tylko tych klientów, których średnia wartość zamówień przekroczyła wartość 200 złotych

Zapytanie SQL tutaj zastosowane, jest zapytaniem z poprzedniego ćwiczenia z dopisaną klauzulą HAVING, która musi się znajdować bezpośredno po klauzuli GROUP BY (można ją stosować tylko do grup danych). Jej działanie jest takie samo jak WHERE, stosowanej w zapytaniach nie zawierających grupowania ani funkcji łączących dane. Jak widzimy, tylko jeden klient złożył zamówienia, których średnia wartość przekroczyła 200 złotych.

Ćwiczenie 4_2_7_4. Zapytanie o liczbę wierszy tabeli zamowienia

Zastosuj polecenie SQL:

SELECT COUNT(*)
FROM zamowienia;
Zapytanie o liczbę wierszy tabeli zamowienia
Rysunek 4_2_7_4. Zapytanie o liczbę wierszy tabeli zamowienia

Ćwiczenie 4_2_7_5. Zapytanie o największe zamówienia poszczególnych klientów

Zastosuj polecenie SQL:

SELECT klient_id, MAX(wartosc)
FROM zamowienia
GROUP BY klient_id;
Zapytanie o największe zamówienia poszczególnych klientów
Rysunek 4_2_7_5. Zapytanie o największe zamówienia poszczególnych klientów

Ćwiczenie 4_2_7_6. Zapytanie o wartość największego zamówienia

Zastosuj polecenie SQL:

SELECT MAX(wartosc)
FROM zamowienia;
Zapytanie o wartość największego zamówienia
Rysunek 4_2_7_6. Zapytanie o wartość największego zamówienia