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.
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;
Ć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;
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;
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;
Ć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;
Ćwiczenie 4_2_7_6. Zapytanie o wartość największego zamówienia
Zastosuj polecenie SQL:
SELECT MAX(wartosc)
FROM zamowienia;