W tej lekcji skupimy się na zaawansowanych operacjach na danych w SQL, czyli na funkcjach agregujących oraz grupowaniu wyników za pomocą klauzuli GROUP BY. Funkcje agregujące są niezwykle przydatne, gdy chcemy obliczać sumy, średnie, minimalne lub maksymalne wartości, liczyć rekordy, a także wykonywać inne operacje na grupach danych. GROUP BY natomiast umożliwia grupowanie danych na podstawie wartości w jednej lub więcej kolumn, co jest niezbędne w bardziej zaawansowanej analizie danych.
Funkcje agregujące
Funkcje agregujące to specjalne funkcje SQL, które wykonują operacje na zestawach wartości i zwracają jedną wartość. Najczęściej używane funkcje agregujące to:
- COUNT() – liczy liczbę wierszy w wyniku zapytania.
- SUM() – sumuje wartości w kolumnie.
- AVG() – oblicza średnią wartość w kolumnie.
- MIN() – zwraca najmniejszą wartość w kolumnie.
- MAX() – zwraca największą wartość w kolumnie.
Te funkcje pozwalają na szybkie uzyskanie wartości statystycznych, co jest przydatne w analizie danych.
COUNT()
Funkcja COUNT() służy do liczenia liczby rekordów, które spełniają określony warunek lub są obecne w danej kolumnie. Możemy używać jej w dwóch podstawowych formach:
- COUNT(kolumna) – liczy tylko te wiersze, gdzie w kolumnie nie ma wartości NULL.
- COUNT(*) – liczy wszystkie wiersze, niezależnie od tego, czy zawierają wartości NULL, czy nie.
Przykład 1: Liczenie liczby zamówień z tabeli Zamowienia:
SELECT COUNT(*) AS liczba_zamowien FROM Zamowienia;
Przykład 2: Liczenie użytkowników, którzy mają przypisany adres e-mail (kolumna Email nie jest NULL):
SELECT COUNT(Email) AS liczba_uzytkownikow_z_mailem FROM Uzytkownicy;
SUM()
Funkcja SUM() sumuje wartości liczbowych kolumn. Najczęściej stosuje się ją w przypadku kolumn typu INT lub FLOAT.
Przykład: Sumowanie wartości wszystkich zamówień (załóżmy, że mamy kolumnę Wartosc w tabeli Zamowienia):
SELECT SUM(Wartosc) AS suma_zamowien FROM Zamowienia;
To zapytanie zwróci całkowitą wartość wszystkich zamówień.
AVG()
Funkcja AVG() oblicza średnią wartość dla kolumny liczb, co jest przydatne przy analizowaniu danych takich jak średnia wartość zamówień, średnia ocena użytkowników itp.
Przykład: Obliczanie średniej wartości zamówień:
SELECT AVG(Wartosc) AS srednia_wartosc_zamowien FROM Zamowienia;
To zapytanie zwróci średnią wartość zamówień w bazie danych.
MIN() i MAX()
Funkcje MIN() i MAX() zwracają odpowiednio najmniejszą i największą wartość z danej kolumny.
Przykład 1: Znalezienie najtańszego zamówienia:
SELECT MIN(Wartosc) AS najmniejsza_wartosc_zamowienia FROM Zamowienia;
Przykład 2: Znalezienie najdroższego zamówienia:
SELECT MAX(Wartosc) AS najwieksza_wartosc_zamowienia FROM Zamowienia;
Funkcje agregujące z klauzulą WHERE
Funkcje agregujące można łączyć z klauzulą WHERE, aby ograniczyć zestaw danych do tych rekordów, które spełniają określony warunek.
Przykład: Liczenie liczby zamówień, które mają wartość większą niż 100:
SELECT COUNT(*) AS liczba_duzych_zamowien FROM Zamowienia WHERE Wartosc > 100;
To zapytanie zwróci liczbę zamówień o wartości większej niż 100.
Grupowanie danych za pomocą GROUP BY
Klauzula GROUP BY służy do grupowania danych na podstawie wartości w jednej lub kilku kolumnach. Często stosuje się ją w połączeniu z funkcjami agregującymi, aby uzyskać zestawienie statystyk dla poszczególnych grup danych.
Składnia GROUP BY wygląda następująco:
SELECT kolumna1, funkcja_agregujaca(kolumna2) FROM tabela GROUP BY kolumna1;
GROUP BY grupuje wiersze na podstawie wartości w kolumnie lub kolumnach wymienionych po tej klauzuli, a funkcje agregujące są stosowane do każdej z grup.
Przykład: Grupowanie zamówień według użytkowników
Załóżmy, że mamy tabelę Zamowienia, w której znajdują się kolumny User_ID i Wartosc. Jeśli chcemy zobaczyć, ile zamówień złożył każdy użytkownik oraz sumę wartości tych zamówień, możemy użyć klauzuli GROUP BY:
SELECT User_ID, COUNT(*) AS liczba_zamowien, SUM(Wartosc) AS suma_wartosci FROM Zamowienia GROUP BY User_ID;
To zapytanie zwróci liczbę zamówień i sumę wartości zamówień dla każdego użytkownika.
Przykład: Średnia wartość zamówień dla każdego użytkownika
Jeśli chcemy obliczyć średnią wartość zamówień dla każdego użytkownika, możemy użyć AVG() w połączeniu z GROUP BY:
SELECT User_ID, AVG(Wartosc) AS srednia_wartosc_zamowienia FROM Zamowienia GROUP BY User_ID;
Wynik zapytania pokaże średnią wartość zamówień dla każdego użytkownika.
Filtracja po grupach za pomocą HAVING
Klauzula HAVING działa podobnie jak WHERE, ale jest stosowana do wyników grupowania, czyli po zastosowaniu klauzuli GROUP BY. Umożliwia ona filtrowanie grup po zastosowaniu funkcji agregujących.
Przykład: Pokaż tylko tych użytkowników, którzy złożyli więcej niż 5 zamówień:
SELECT User_ID, COUNT(*) AS liczba_zamowien FROM Zamowienia GROUP BY User_ID HAVING COUNT(*) > 5;
To zapytanie zwróci tylko tych użytkowników, którzy złożyli więcej niż 5 zamówień.
Łączenie GROUP BY z JOIN
Często GROUP BY jest używane w połączeniu z operacją JOIN, aby grupować dane pochodzące z wielu tabel.
Przykład: Liczenie liczby zamówień oraz sumowanie wartości zamówień dla każdego użytkownika (łącząc dane z tabel Uzytkownicy i Zamowienia):
SELECT Uzytkownicy.Imie, Uzytkownicy.Nazwisko, COUNT(Zamowienia.OrderID) AS liczba_zamowien, SUM(Zamowienia.Wartosc) AS suma_zamowien FROM Uzytkownicy JOIN Zamowienia ON Uzytkownicy.ID = Zamowienia.User_ID GROUP BY Uzytkownicy.Imie, Uzytkownicy.Nazwisko;
To zapytanie zwróci imiona i nazwiska użytkowników, liczbę ich zamówień oraz sumę wartości tych zamówień.
Podsumowanie
Funkcje agregujące i klauzula GROUP BY są kluczowymi narzędziami do analizy danych w SQL. Funkcje takie jak COUNT(), SUM(), AVG(), MIN() i MAX() pozwalają na przeprowadzanie operacji statystycznych na zbiorach danych, podczas gdy GROUP BY umożliwia grupowanie wyników na podstawie określonych kryteriów. Dzięki klauzuli HAVING możemy dodatkowo filtrować wyniki grupowania, co daje jeszcze większą kontrolę nad analizą danych. W połączeniu z operacją JOIN, grupowanie danych z wielu tabel staje się potężnym narzędziem do uzyskiwania skomplikowanych i zaawansowanych analiz.
W kolejnych lekcjach zgłębimy bardziej zaawansowane techniki pracy z SQL, takie jak podzapytania, indeksowanie i optymalizacja zapytań.
Gratulacje! Ukończyłeś lekcję 8.
Przejdź teraz do lekcji 9 >> Podzapytania (Subqueries)
Spis Treści - darmowy kurs SQL
Wprowadzenie: Czym jest baza danych?
Lekcja 1: Instalacja dedykowanego środowiska dla SQL
Lekcja 2: Tworzenie bazy danych
Lekcja 3: Tworzenie tabel w SQL
Lekcja 4: Wstawianie danych do bazy danych SQL
Lekcja 5: Pobieranie danych z bazy danych SQL
Lekcja 6: Aktualizacja i usuwanie danych SQL
Lekcja 7: Operacje na danych (JOIN)
Lekcja 8: Funkcje agregujące i grupowanie danych (GROUP BY)
Lekcja 9: Podzapytania (Subqueries)
Lekcja 10: Indeksy w bazach danych
Lekcja 11: Optymalizacja zapytań SQL
Lekcja 12: Transakcje w bazach danych
Lekcja 13: Zarządzanie blokadami (Locks) i dostępem do danych
Lekcja 14: Replikacja danych w bazach danych
Lekcja 15: Partycjonowanie danych SQL
Lekcja 16: Widoki (Views) w bazach danych
Lekcja 17: Procedury składowane (Stored Procedures) i funkcje w SQL
Lekcja 18: Wyzwalacze (Triggers) w bazach danych
Lekcja 19: Zaawansowane indeksowanie w bazach danych
Lekcja 20: Narzędzia do zarządzania dużymi danymi (Big Data) w SQL
Lekcja 21: Bezpieczeństwo baz danych
Dodatki:
- Spis najważniejszych funkcji SQL
Jeśli chciałbyś być poinformowany o następnych kursach to zapisz się do naszego newslettera: