W dzisiejszej lekcji zgłębimy zaawansowane komendy SQL, które pozwolą Ci efektywnie analizować dane. Nauczysz się, jak grupować dane, używać funkcji agregujących i wykorzystywać podzapytania do tworzenia bardziej złożonych zapytań.
Klauzula GROUP BY
pozwala na grupowanie wierszy, które mają takie same wartości w określonych kolumnach. Umożliwia to wykonywanie operacji agregujących na tych grupach.
Przykład: Załóżmy, że mamy tabelę Zamowienia
z kolumnami ID_Klienta
, Produkt
i Kwota
. Chcemy sprawdzić, ile zamówień złożył każdy klient.
SELECT ID_Klienta, COUNT(*) AS Ilosc_Zamowien
FROM Zamowienia
GROUP BY ID_Klienta;
Wyjaśnienie: COUNT(*)
zlicza wszystkie wiersze w grupie, a GROUP BY ID_Klienta
grupuje zamówienia po identyfikatorze klienta. Wynikiem będzie tabela z identyfikatorem klienta i liczbą jego zamówień.
Funkcje agregujące operują na zbiorach danych i zwracają pojedynczą wartość. Najpopularniejsze z nich to:
COUNT()
: Zlicza liczbę wierszy.SUM()
: Sumuje wartości w kolumnie numerycznej.AVG()
: Oblicza średnią wartość w kolumnie numerycznej.MIN()
: Zwraca najmniejszą wartość w kolumnie.MAX()
: Zwraca największą wartość w kolumnie.Przykład: Obliczmy średnią kwotę zamówienia dla każdego klienta.
SELECT ID_Klienta, AVG(Kwota) AS Srednia_Kwota
FROM Zamowienia
GROUP BY ID_Klienta;
Wyjaśnienie: Używamy AVG(Kwota)
do obliczenia średniej kwoty zamówień dla każdej grupy klientów. GROUP BY ID_Klienta
grupuje dane jak poprzednio.
Podzapytania to zapytania SQL zagnieżdżone w innym zapytaniu. Mogą być używane w klauzulach SELECT
, FROM
, WHERE
i HAVING
. Umożliwiają tworzenie bardziej złożonych zapytań.
Przykład: Znajdźmy klientów, którzy złożyli zamówienia na kwotę większą niż średnia kwota wszystkich zamówień.
SELECT ID_Klienta, Kwota
FROM Zamowienia
WHERE Kwota > (SELECT AVG(Kwota) FROM Zamowienia);
Wyjaśnienie: Wewnątrz klauzuli WHERE
mamy podzapytanie (SELECT AVG(Kwota) FROM Zamowienia)
, które oblicza średnią kwotę zamówienia. Główne zapytanie wybiera klientów, których kwoty zamówień są wyższe niż obliczona średnia.
Explore advanced insights, examples, and bonus exercises to deepen understanding.
Witajcie, przyszli analitycy danych! Dziś kontynuujemy naszą podróż po świecie SQL, zagłębiając się w bardziej zaawansowane techniki analizy danych. Pamiętajcie, że umiejętność efektywnego wykorzystywania SQL jest kluczowa dla każdego Data Scientista. Zdobytą wiedzę możecie natychmiast przetestować na prawdziwych bazach danych, takich jak te używane w platformach e-commerce czy systemach bankowych. Im więcej ćwiczycie, tym lepiej!
Przeanalizujmy teraz kilka bardziej zaawansowanych aspektów, które pomogą Wam jeszcze lepiej wykorzystywać SQL.
1. Klauzula `HAVING` - Filtrowanie Pogrupowanych Danych:
Podczas gdy klauzula `WHERE` filtruje dane przed grupowaniem, klauzula `HAVING` pozwala filtrować wyniki po grupowaniu. Jest to niezwykle przydatne, gdy chcemy na przykład znaleźć kategorie produktów, których średnia cena przekracza określony próg.
SELECT kategoria, AVG(cena) AS srednia_cena
FROM produkty
GROUP BY kategoria
HAVING AVG(cena) > 50;
Ten przykład zwraca kategorie produktów, w których średnia cena jest wyższa niż 50.
2. Podzapytania Koralikowe (correlated subqueries):
Podzapytania, które odwołują się do kolumn z zapytania zewnętrznego, nazywane są podzapytaniami koralikowymi. Są one użyteczne, gdy chcemy np. znaleźć pracowników zarabiających więcej niż średnia płaca w ich dziale.
SELECT imie, nazwisko, zarobki
FROM pracownicy p
WHERE zarobki > (SELECT AVG(zarobki) FROM pracownicy WHERE dzial = p.dzial);
W tym przykładzie podzapytanie oblicza średnią zarobków dla każdego działu, a zapytanie zewnętrzne porównuje zarobki poszczególnych pracowników z tą średnią.
3. Wykorzystanie `CASE` w SQL:
Klauzula `CASE` pozwala na warunkowe zwracanie wartości. To jak instrukcja `if-else` w programowaniu, ale w kontekście zapytań SQL. Można jej używać do kategoryzacji danych w locie.
SELECT nazwa_produktu,
cena,
CASE
WHEN cena > 100 THEN 'Drogi'
WHEN cena BETWEEN 50 AND 100 THEN 'Umiarkowany'
ELSE 'Tani'
END AS kategoria_cenowa
FROM produkty;
Ten przykład kategoryzuje produkty na podstawie ich ceny.
Przetestujmy zdobytą wiedzę!
Ćwiczenie 1: Analiza Sprzedaży w Sklepie Internetowym
Wyobraź sobie, że masz bazę danych ze sprzedażą w sklepie internetowym. Znajdź kategorie produktów, których łączna sprzedaż (suma wartości zamówień) przekracza 10000 zł, używając klauzuli `HAVING`.
Podpowiedź: Użyj tabeli `zamowienia`, która zawiera informacje o produktach, ilości i cenach. Przetwarzaj dane z uwzględnieniem kategorii produktów.
Ćwiczenie 2: Średnie Zarobki w Firmie
Napisz zapytanie, które używa podzapytania koralikowego, aby zwrócić imiona i nazwiska pracowników zarabiających więcej niż średnia płaca w całej firmie.
Wykorzystanie tych zaawansowanych technik jest wszechobecne w świecie realnym:
W Polsce, takie narzędzia są często używane do analizy danych w instytucjach państwowych (np. GUS), firmach ubezpieczeniowych, a także w wielu firmach produkcyjnych i usługowych.
Spróbujcie rozwiązać następujące zadanie, aby sprawdzić swoją wiedzę:
Zaawansowane Wyzwanie: Napisz zapytanie, które zwraca top 5 kategorii produktów z największym średnim rabatem (rabat to różnica między ceną katalogową a ceną po rabacie), korzystając z `GROUP BY`, `HAVING`, oraz sortowania. Wykorzystaj również `CASE` do skategoryzowania rabatów (np. "Niski", "Średni", "Wysoki").
Aby kontynuować naukę:
Polecane zasoby to kursy online na platformach takich jak Coursera, Udemy i edX, a także książki i blogi poświęcone SQL.
Masz tabelę `Produkty` z kolumnami `Kategoria` i `Nazwa_Produktu`. Napisz zapytanie SQL, które wyświetli liczbę produktów w każdej kategorii. Użyj `GROUP BY` i `COUNT()`.
Mając tabelę `Zamowienia` (jak wcześniej), napisz zapytanie SQL, które wyświetli identyfikator klienta i sumę jego zamówień. Użyj `SUM()` i `GROUP BY`.
Użyj tabeli `Zamowienia`. Napisz zapytanie, które znajdzie klientów, których zamówienia są większe niż 90% najwyższych zamówień. Użyj podzapytania w klauzuli `WHERE`.
Zastanów się, w jakich sytuacjach w pracy zawodowej (np. w analizie danych, marketingu, handlu) mogłyby Ci się przydać poznane komendy. Podaj 2-3 przykłady.
Wyobraź sobie, że pracujesz w firmie e-commerce. Twoim zadaniem jest analiza sprzedaży. Użyj poznanych komend, aby znaleźć: 1. Które kategorie produktów generują najwyższe przychody. 2. Którzy klienci generują największe przychody. 3. Średnią wartość zamówienia dla każdego miesiąca.
Przygotuj się na następną lekcję, w której omówimy zaawansowane funkcje SQL, takie jak funkcje okienkowe i operacje na ciągach znaków. Przejrzyj dokumentację swojej bazy danych i zobacz, jakie funkcje są dostępne.
We're automatically tracking your progress. Sign up for free to keep your learning paths forever and unlock advanced features like detailed analytics and personalized recommendations.