Bazy Danych

Funkcje agregujące w SQL na maturze: AVG, SUM, MIN, MAX i COUNT

KI

KursInformatyka

Eksperci od przygotowania do matury z informatyki

28 min
Obraz główny artykułu: Funkcje agregujące w SQL na maturze: AVG, SUM, MIN, MAX i COUNT

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;
sql

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;
sql

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.

ZapisCo 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;
sql

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), a MAX(DataUr) – najmłodszego.
  • Na tekstach: Działają zgodnie z sortowaniem alfabetycznym. MIN(Nazwisko) to pierwszy uczeń na liście w dzienniku, a MAX(Nazwisko) to ten na samym dole listy.
SELECT 
    MIN(Cena) AS NajtanszyProdukt, 
    MAX(Cena) AS NajdrozszyProdukt, 
    MAX(DataDodania) AS NajnowszyProdukt
FROM Asortyment;
sql

Gdzie używamy funkcji agregujących?

Zasadniczo, funkcje agregujące mogą pojawić się tylko w dwóch miejscach zapytania SQL:

  1. W klauzuli SELECT: Aby po prostu wyświetlić obliczoną wartość w wyniku (np. SELECT SUM(Kwota) FROM...).
  2. 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 przez HAVING 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ć Klienci z Zamowienia poprzez ID_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;
sql

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ę

Projektowanie bazZapytania SQLFunkcje ExcelTabele przestawne
199 zł

jednorazowo


Szukasz więcej praktyki? Sprawdź pełny kurs do matury z informatyki.

Tagi:

matura
informatyka
sql
bazy danych
funkcje agregujące
avg
sum
count
ms access

Udostępnij artykuł:

KI

O autorze: KursInformatyka

Zespół ekspertów specjalizujących się w przygotowaniu do matury z informatyki. Pomagamy uczniom osiągnąć wymarzony wynik na egzaminie.

Zobacz wszystkie artykuły

Bądź na bieżąco

Zapisz się do newslettera i otrzymuj najnowsze artykuły, porady i materiały prosto na swoją skrzynkę.

Twoje dane są bezpieczne. Możesz wypisać się w każdej chwili.