Zadania z baz danych na maturze z informatyki to w dużej mierze praca na statystykach. Egzaminatorzy CKE rzadko proszą o proste wypisanie całej zawartości tabeli. Zamiast tego chcą wiedzieć: 'Ile wynosi średnia ocen?', 'Który produkt sprzedawał się najlepiej?', 'Jaka jest łączna wartość zamówień?'. Aby odpowiedzieć na te pytania, musisz biegle posługiwać się narzędziami, jakimi są funkcje agregujące SQL. W tym artykule omówimy pięć najważniejszych z nich, zwracając szczególną uwagę na specyfikę środowiska MS Access, na którym pracujesz podczas egzaminu.
Czym są funkcje agregujące SQL?
Słowo 'agregacja' oznacza łączenie wielu elementów w jedną całość. W kontekście baz danych funkcje agregujące SQL to specjalne polecenia, które pobierają dane z wielu wierszy (rekordów) i na ich podstawie zwracają tylko jedną wartość podsumowującą. Zamiast wyświetlać 100 pojedynczych ocen, funkcja agregująca weźmie je wszystkie i wypluje jedną liczbę – na przykład ich średnią lub sumę.
Złota zasada agregacji
Jeśli w klauzuli SELECT używasz funkcji agregującej (np. SUM(Punkty)) oraz zwykłej kolumny (np. Klasa), MUSISZ użyć klauzuli GROUP BY dla tej zwykłej kolumny. Baza danych musi wiedzieć, w jakich 'workach' (grupach) ma wykonać te obliczenia.
Wielka Piątka: Funkcje, które musisz znać
1. Funkcja AVG() – Średnia arytmetyczna
Jeśli zastanawiasz się, jakie zadanie ma funkcja agregująca AVG użyta w zapytaniu, odpowiedź jest prosta: oblicza ona średnią arytmetyczną ze wszystkich wartości w podanej kolumnie. Używa się jej wyłącznie do kolumn zawierających wartości liczbowe.
Wzór matematyczny, który realizuje ta funkcja, to po prostu: AVG = SUM / COUNT (Suma wszystkich wartości podzielona przez ich liczbę).
SELECT AVG(Ocena) AS SredniaOcen
FROM Oceny
WHERE ID_Przedmiotu = 5;Uwaga na wartości NULL!
Funkcja AVG() ignoruje puste komórki (wartości NULL). Jeśli masz 5 uczniów, ale tylko 4 z nich ma wpisaną ocenę, AVG podzieli sumę ocen przez 4, a nie przez 5. Ma to ogromne znaczenie w zadaniach maturalnych, gdzie braki w danych są celowo wstawiane przez twórców arkusza!
2. Funkcja SUM() – Sumowanie kolumny SQL
Podobnie jak w Excelu, sumowanie kolumny SQL realizujemy za pomocą funkcji SUM(). Dodaje ona do siebie wszystkie wartości liczbowe we wskazanej kolumnie. Jest niezastąpiona przy obliczaniu obrotów firmy, łącznej liczby punktów w turnieju czy całkowitego czasu trwania logowań.
SELECT Szkola, SUM(ZdobytePunkty) AS LacznaPunktacja
FROM WynikiZawodow
GROUP BY Szkola;3. Funkcja COUNT() – Zliczanie rekordów
To funkcja, która pojawia się w niemal każdym arkuszu maturalnym. Służy do odpowiadania na pytanie: 'Ile jest...?'. Zwraca liczbę wierszy, które pasują do zadanego kryterium.
| Zapis | Co robi? | Kiedy używać? |
|---|---|---|
COUNT(*) | Zlicza wszystkie wiersze w tabeli/grupie, nawet te całkowicie puste (NULL). | Gdy chcesz wiedzieć, ilu jest wszystkich uczniów w klasie. |
COUNT(Kolumna) | Zlicza tylko te wiersze, gdzie podana kolumna NIE jest pusta (NULL). | Gdy chcesz wiedzieć, ilu uczniów oddało pracę domową (mają wpisaną datę w kolumnie DataOddania). |
-- Liczy wszystkich zatrudnionych pracowników:
SELECT COUNT(*) AS WszyscyPracownicy
FROM Pracownicy;
-- Liczy tylko tych, którzy mają przydzielony numer telefonu (nie jest pusty):
SELECT COUNT(NumerTelefonu) AS PracownicyZTelefonem
FROM Pracownicy;Problem COUNT(DISTINCT) w MS Access
W języku MySQL możesz napisać COUNT(DISTINCT Miasto), aby policzyć, z ilu różnych miast pochodzą klienci. Niestety, MS Access nie obsługuje COUNT(DISTINCT). Jeśli na maturze spotkasz takie zadanie, musisz poradzić sobie podzapytaniem: najpierw stworzyć kwerendę wyciągającą unikalne miasta (SELECT DISTINCT Miasto), a potem w drugiej kwerendzie zliczyć wyniki z tej pierwszej. Pamiętaj o tym ograniczeniu Accessa!
4 i 5. MIN() oraz MAX() – Ekstrema
Funkcje te znajdują odpowiednio najmniejszą i największą wartość w grupie lub całej tabeli. Co ciekawe, w przeciwieństwie do SUM i AVG, funkcje te działają rewelacyjnie nie tylko na liczbach!
- Na liczbach: Zwracają najwyższą pensję / najniższą cenę.
- Na datach:
MIN(DataUr)zwróci najstarszego ucznia (najwcześniejsza data), aMAX(DataUr)– najmłodszego. - Na tekstach: Działają zgodnie z sortowaniem alfabetycznym.
MIN(Nazwisko)to pierwszy uczeń na liście w dzienniku, aMAX(Nazwisko)to ten na samym dole listy.
SELECT
MIN(Cena) AS NajtanszyProdukt,
MAX(Cena) AS NajdrozszyProdukt,
MAX(DataDodania) AS NajnowszyProdukt
FROM Asortyment;Gdzie używamy funkcji agregujących?
Zasadniczo, funkcje agregujące mogą pojawić się tylko w dwóch miejscach zapytania SQL:
- W klauzuli SELECT: Aby po prostu wyświetlić obliczoną wartość w wyniku (np.
SELECT SUM(Kwota) FROM...). - W klauzuli HAVING: Aby odfiltrować zgrupowane dane. Pamiętaj: nie możesz użyć funkcji agregującej w
WHERE! Jeśli chcesz odrzucić klasy, których średnia jest mniejsza niż 3.0, robisz to przezHAVING AVG(Ocena) >= 3.0.
Zadanie maturalne z rozwiązaniem krok po kroku
Przeanalizujmy typowe, złożone zadanie z arkusza CKE, które wymaga użycia kilku funkcji agregujących w jednym zapytaniu.
Zadanie: Raport ze sprzedaży (Sklep Internetowy)
Mamy tabele Klienci (ID_Klienta, Miasto) oraz Zamowienia (ID_Zamowienia, ID_Klienta, Kwota, DataZamowienia).
Stwórz zestawienie (raport) dla każdego miasta. Wypisz nazwę miasta, liczbę złożonych w nim zamówień (łącznie), średnią kwotę zamówienia (zaokrągloną do pełnych złotych - w Accessie można użyć funkcji Round) oraz maksymalną kwotę zamówienia.
Pomiń w zestawieniu miasta, w których klienci złożyli łącznie mniej niż 5 zamówień.
Analiza zapytania
- Tabele: Trzeba połączyć
KliencizZamowieniapoprzezID_Klienta. - Grupowanie: Chcemy raport 'dla każdego miasta', więc na pewno użyjemy
GROUP BY Klienci.Miasto. - Zliczanie: Użyjemy
COUNT(Zamowienia.ID_Zamowienia). - Średnia: Do czego służy AVG? Do średniej kwoty!
AVG(Zamowienia.Kwota). - Ekstremum:
MAX(Zamowienia.Kwota). - Filtrowanie: 'Pomiń... gdzie mniej niż 5 zamówień'. Filtrujemy po funkcji agregującej, więc niezbędne jest użycie
HAVING COUNT(...) >= 5.
Rozwiązanie w języku SQL (MS Access)
SELECT
Klienci.Miasto,
COUNT(Zamowienia.ID_Zamowienia) AS LiczbaZamowien,
ROUND(AVG(Zamowienia.Kwota), 0) AS SredniaWartosc,
MAX(Zamowienia.Kwota) AS NajdrozszeZamowienie
FROM
Klienci
INNER JOIN Zamowienia ON Klienci.ID_Klienta = Zamowienia.ID_Klienta
GROUP BY
Klienci.Miasto
HAVING
COUNT(Zamowienia.ID_Zamowienia) >= 5;Ten jeden blok kodu pokazuje, że doskonale rozumiesz relacje, potrafisz agregować dane (wiele na raz!) i odrzucać niechciane wyniki po ich przetworzeniu. Zaliczenie takiego podpunktu na egzaminie to czysta przyjemność.
Najczęściej zadawane pytania (FAQ)
❓ Najczęściej zadawane pytania (FAQ)
Czy mogę używać aliasów z klauzuli SELECT w klauzuli HAVING?
W MS Access często tak (np. 'HAVING LiczbaZamowien >= 5'), jednak w standardowym SQL jest to zazwyczaj niedozwolone, ponieważ HAVING wykonuje się przed utworzeniem aliasów w SELECT. Najbezpieczniejszą i najbardziej profesjonalną praktyką jest powtórzenie funkcji: 'HAVING COUNT(ID_Zamowienia) >= 5'. Wtedy masz 100% pewności, że zadziała na każdej bazie.
Jak policzyć sumę warunkową, czyli odpowiednik SUM.JEŻELI z Excela w SQL?
Choć SQL nie ma jednej funkcji SUMIF, robi się to łącząc klauzulę WHERE z funkcją SUM. Najpierw odrzucasz dane w WHERE (np. 'WHERE Kategoria = "Elektronika"'), a potem normalnie sumujesz. W Accessie można też użyć wbudowanej funkcji 'IIF' wewnątrz SUM: 'SUM(IIF(Kategoria="Elektronika", Kwota, 0))'.
Dlaczego podczas używania AVG() wynik ma mnóstwo miejsc po przecinku?
Funkcja AVG zwraca dokładny wynik dzielenia. Typ danych jest konwertowany na zmiennoprzecinkowy (Float/Double). Aby poprawić estetykę zapytania (lub jeśli zadanie tego wymaga), zawsze otaczaj funkcję AVG poleceniem ROUND, np. 'ROUND(AVG(Kwota), 2)', co zaokrągli wynik do dwóch miejsc po przecinku.
Opanowanie funkcji agregujących przenosi Twoje umiejętności tworzenia zapytań SQL na zupełnie nowy poziom. Pamiętaj tylko o pilnowaniu spójności między SELECT a GROUP BY oraz o tym, by nigdy nie wkładać agregacji do WHERE. Powodzenia z arkuszami!
Bazy Danych i Arkusze Kalkulacyjne
MS Access, SQL i zaawansowany Excel na maturę
jednorazowo
Szukasz więcej praktyki? Sprawdź pełny kurs do matury z informatyki.