Dział IV

Bazy Danych: Agregacja i Grupowanie

To odpowiednik Tabel Przestawnych z Excela. Zamiast wypisywać suche wiersze, uczymy bazę tworzyć analityczne podsumowania.

Wstęp: Koniec z wypisywaniem, czas na Analizę

Dotychczas nasze kwerendy działały jak proste filtry: "Wypisz mi wszystkie wypożyczenia Jana Kowalskiego". Wynikiem była długa lista suchych rekordów. Na maturze jednak najwięcej punktów zdobywa się za polecenia typu: "Podaj łączną liczbę wypożyczeń dla każdego klienta" albo "Oblicz sumę przychodów w poszczególnych latach". Do tego potrzebujemy mechanizmu, który ściśnie tysiące wierszy w zgrabne pigułki informacyjne. Witamy w świecie Agregacji.

1Transformacja kwerendy: Przycisk Sigma (Σ)

Domyślnie nowa kwerenda w Accessie znajduje się w "trybie wypisywania" (zwykłe SELECT). Aby uruchomić potęgę analizy, musisz dokonać fizycznej transformacji siatki projektowej. Służy do tego jeden, niepozorny przycisk na górnej wstążce menu.

⚙️ Procedura włączenia trybu Agregacji

Krok 1: Wstążka

Będąc w Widoku Projektu kwerendy, spójrz na górne menu (zakładka Projektowanie kwerendy). Znajdziesz tam duży przycisk z matematycznym symbolem Σ (Suma).

Σ
Krok 2: Nowy Wiersz

Po kliknięciu przycisku, w dolnej siatce projektowej pojawi się natychmiast nowy, magiczny wiersz o nazwie Podsumowanie (Total). Wskakuje on dokładnie pomiędzy wiersz Tabela a Sortuj.

Pole: Nazwisko
Tabela: Klienci
Podsumowanie: Grupuj według

Krok 3: Zmiana filozofii

Od tego momentu kwerenda przestaje wypisywać dane wiersz po wierszu. Zaczyna traktować wszystkie rekordy jako masę plastyczną, którą będzie zlepiać i ugniatać według Twoich rozkazów.

Wypisywanie ➡️ Ściskanie

🚨
Śmiertelna pułapka maturalna (Domyślne zachowanie)
W momencie, gdy włączysz przycisk Σ, Access z automatu wpisuje w każdej kolumnie w siatce opcję "Grupuj według" (Group By). I tu leży pies pogrzebany! Jeśli zapomnisz zmienić ten napis w kolumnie, którą chcesz np. zsumować lub policzyć, otrzymasz całkowicie błędny, rozbity wynik.

Złota zasada CKE: Jeśli włączasz podsumowania, musisz mieć w siatce dwa rodzaje kolumn. Jedną, po której grupujesz (np. Klasa), oraz drugą, w której zamienisz słowo "Grupuj według" na konkretną funkcję (np. "Policz" dla nazwisk, aby wiedzieć ilu uczniów jest w klasie). Zostawienie "Grupuj według" wszędzie nie podsumuje absolutnie niczego!

2Grupuj według (Group By): Anatomia "Koszyków"

Najważniejsze pytanie, jakie musisz zadać sobie po włączeniu przycisku Σ, brzmi: Dla kogo mam policzyć wynik? Czy CKE chce wynik dla każdego województwa osobno? Dla każdego ucznia z osobna? A może dla każdego roku? Odpowiedź na to pytanie wskazuje Ci kolumnę, w której bezwzględnie musi zostać napis Grupuj według. Ta kolumna staje się Twoim wierszem głównym, wokół którego zwinie się cała reszta danych.

🗑️ Mechanika Koszyków (Jak baza dzieli wiersze)

Wyobraź sobie bazę 1000 zamówień. Opcja Grupuj według bierze te zamówienia i rozrzuca je do podpisanych koszyków. Jeśli koszyk istnieje, wrzuca tam zamówienie. Jeśli nie, tworzy nowy. Liczba "koszyków" to ostateczna liczba wierszy w Twoim wyniku.
Grupa: PŁEĆ
Tylko 2 wiersze
Baza tworzy jeden koszyk z napisem "K" i drugi z napisem "M". Zgniata 1000 zamówień w zaledwie dwa potężne wiersze podsumowania.
Grupa: MIESIĄC
Tylko 12 wierszy
Baza skanuje daty i tworzy 12 koszyków (Styczeń, Luty...). To idealne ustawienie do analizowania trendów i sezonowości w czasie.
Grupa: ID_KLIENTA
Np. 350 wierszy
Baza tworzy osobny koszyk dla każdego unikalnego klienta. Jeśli klient Jan (ID: 5) złożył 10 zamówień, wpadną one do jednego, wspólnego koszyka z napisem "5".
🧩
Zasada jednoznaczności ("Wyświetl Imię i Nazwisko")
Polecenie często mówi: "Podaj Imię i Nazwisko klienta oraz łączną kwotę jego zamówień".

W takiej sytuacji w siatce projektowej zostawiasz Grupuj według w kolumnie Imie ORAZ zostawiasz Grupuj według w kolumnie Nazwisko (łączną kwotę ustawiasz na "Suma"). Access połączy te dwie kolumny w "hybrydowy koszyk" (np. koszyk: Jan Kowalski, koszyk: Piotr Nowak). To w 100% poprawne i wymagane, by wyświetlić pełne dane osoby obok jej obliczonego wyniku.

💀
Pułapka rozbicia: Nadmiar "Grupuj według"
Gdy dorzucasz do siatki nową kolumnę (np. żeby w niej posortować), przypomnij sobie, że Access domyślnie wstawia w niej "Grupuj według".

Przykład katastrofy: Chcesz policzyć, ile zamówień złożył każdy klient. Ustawiłeś Grupuj według na ID_Klienta. Ale wrzuciłeś też do siatki kolumnę Data_Zamowienia i zapomniałeś zmienić w niej napis. Access zgłupieje. Zamiast stworzyć jeden koszyk dla "Jana", stworzy koszyk "Jan z 12 maja", "Jan z 15 maja", "Jan z 20 maja". Zamiast jednego podsumowania, otrzymasz rozbitą listę pojedynczych transakcji!



Wniosek: Każde "Grupuj według", które nie jest absolutnie wymagane przez polecenie CKE, bezpowrotnie psuje Twój wynik.

3Funkcje Agregujące: Matematyka w Koszykach

Kiedy baza danych utworzy już grupy (koszyki) dzięki opcji Grupuj według, musi wiedzieć, co zrobić z dziesiątkami wierszy, które wpadły do środka każdej z nich. Do tego służą funkcje agregujące. Wymuszają one na bazie danych, aby zamiast listy, wypluła tylko jedną, konkretną liczbę (podsumowanie). Ich pomylenie na maturze to najczęstszy powód utraty punktów za kwerendę.

Suma (Sum)

Dodaje do siebie wszystkie wartości z wierszy. Działa absolutnie TYLKO na kolumnach liczbowych. Nie da się "zsumować" nazwisk.

KIEDY UŻYĆ NA EGZAMINIE: "Podaj łączny przychód z biletów", "Oblicz całkowity czas trwania wycieczek", "Ile łącznie sztuk sprzedano".

🔢 Policz (Count)

Zlicza "sztuki" – czyli odpowiada na pytanie, ile wierszy znajduje się w koszyku. Całkowicie ignoruje to, jaka liczba jest w środku. Działa na tekście, datach i liczbach.

KIEDY UŻYĆ NA EGZAMINIE: "Ilu było klientów z Krakowa", "Podaj liczbę wypożyczeń", "Ile razy logował się użytkownik".

Śorangenia (Avg)

Sumuje wartości z koszyka, a następnie dzieli je przez ich liczbę. Działa tylko na liczbach. CKE często punktuje za zaokrąglenie jej we właściwościach pola.

KIEDY UŻYĆ NA EGZAMINIE: "Podaj śorangenią ocenę ucznia", "Jaki był śorangeni dobowy przyrost temperatury".

↕️ Min / Max

Zwraca skrajne wartości. Ogromna potęga tej funkcji polega na tym, że świetnie działa na datach (Max to najnowsza data) oraz na tekście (Min to pierwsze nazwisko na liście alfabetycznej).

KIEDY UŻYĆ NA EGZAMINIE: "Kto zarejestrował się jako ostatni", "Podaj datę najstarszego zamówienia".

💀
Największy dramat maturalny: SUMA vs POLICZ
W potocznym języku często mówimy "policz mi to", mając na myśli "dodaj to do siebie". W bazach danych ten błąd jest bezlitośnie ścinany przez egzaminatorów do 0 punktów. Wyobraź sobie bazę z zamówieniami od jednego klienta: kupił buty za 200 zł i czapkę za 50 zł.
BŁĄD: Użycie "Policz" (Count) na kwocie
Zamiast połączyć 200+50, baza policzy ile było paragonów.
Wynik = 2
DOBRZE: Użycie "Sumy" na kwocie
Baza wyciąga wartości z paragonów i faktycznie wykonuje działanie dodawania.
Wynik = 250
💡
Złota zasada funkcji Policz (Gwarancja poprawnego wyniku)
Jeśli polecenie CKE zmusza Cię do zliczenia zdarzeń (np. "Podaj, ile razy Jan wypożyczył książkę"), funkcję Policz ustawiaj bezwzględnie na kolumnie będącej Kluczem Podstawowym (PK) np. na kolumnie ID_Wypozyczenia.

Dlaczego? Funkcja Policz ignoruje całkowicie puste komórki (Null). Jeśli kazałbyś bazie policzyć kolumnę Uwagi_do_zamowienia, a zaledwie 3 z 10 klientów zostawiło jakikolwiek komentarz, Twoim wynikiem będzie błędne 3 (zamiast 10 zamówień). Klucz Podstawowy (ID) z definicji nigdy nie może być pusty, więc użycie na nim funkcji Policz daje 100% odporności na błędy "pustych komórek" CKE!

4Filtrowanie podwójne: Gdzie vs Warunek (WHERE vs HAVING)

Kiedy włączasz tryb podsumowań (przycisk Σ), zwykłe filtrowanie przestaje wystarczać. Od teraz musisz precyzyjnie określić bazie danych, kiedy ma odrzucić niechciane informacje: czy ma wyrzucić surowe wiersze jeszcze zanim wpadną do koszyków, czy też ma najpierw policzyć koszyki i wyrzucić te, które są np. zbyt lekkie. W języku SQL odpowiadają za to klauzule WHERE oraz HAVING. W siatce Accessa wygląda to nieco inaczej.

🛑 Opcja "Gdzie" (WHERE)

Bramkarz przed klubem (Filtruje surowce)
Działa na najniższym poziomie, na oryginalnych danych. Odrzuca wiersze ZANIM baza zacznie cokolwiek sumować czy grupować.

JAK USTAWIĆ W ACCESSIE? W wierszu Podsumowanie rozwijasz listę i zamiast "Grupuj według" wybierasz opcję Gdzie (Where). Następnie w wierszu Kryteria wpisujesz warunek (np. "Kobieta").

⚖️ Warunek w Funkcji (HAVING)

Inspektor Koszyków (Filtruje wyniki)
Działa dopiero PO ulepieniu grup i przeliczeniu w nich matematyki. Odrzuca całe gotowe koszyki, które nie spełniają normy.

JAK USTAWIĆ W ACCESSIE? W wierszu Podsumowanie ustawiasz funkcję (np. Suma). Następnie bezpośorangenio pod nią, w wierszu Kryteria, wpisujesz warunek (np. > 5000).

💀
Błąd Pól "Gdzie": Pokaż = Zepsute
Jeśli w jakiejkolwiek kolumnie zmienisz opcję na "Gdzie" (Where), Access z automatu, często niezauważalnie, odznacza pole "Pokaż" (ten mały kwadracik). Nigdy, przenigdy nie zaznaczaj go z powrotem!

Kolumna pełniąca rolę "bramkarza przed klubem" nie może być jednocześnie wyświetlana na ekranie z wynikami grupy. Jeśli zaznaczysz pole "Pokaż" w kolumnie typu Gdzie, Access wyrzuci natychmiastowy błąd SQL: "Nie można mieć w klauzuli SELECT pola wybranego jako funkcja agregująca lub GROUP BY...". Kolumny WHERE muszą pozostać w cieniu!

Analiza Klasycznego Zadania CKE

Przeanalizujmy polecenie: "Dla każdej klasy trzeciej (np. 3A, 3B) podaj łączną liczbę punktów zebranych z testów informatycznych w kwietniu. Wyświetl tylko te klasy, których suma punktów przekroczyła 500." To zadanie wymaga użycia obu rodzajów filtrowania naraz!

Kolumna w siatcePodsumowanieKryteriaDlaczego właśnie tak?
NazwaKlasyGrupuj wedługLike "3*"Budujemy koszyki tylko dla klas zaczynających się od "3". To jest nasze jądro zestawienia.
MiesiacGdzie"Kwiecień"Bramkarz (WHERE): Wyrzuca do kosza wszystkie testy z marca czy maja zanim w ogóle zaczną być sumowane. Kwadracik "Pokaż" odznaczony!
PunktySuma> 500Inspektor (HAVING): Najpierw zgniata punkty kwietniowe w łączną liczbę. Dopiero po zsumowaniu sprawdza wynik. Jeśli wynosi np. 480, odrzuca całą klasę z raportu.