Lekcja 10: Funkcje agregujące (Część 2) - MIN, MAX

Preview Mode

You're viewing this material in preview mode. Sign up to track your progress and access all features.

Lekcja 10: Funkcje agregujące (Część 2) - MIN, MAX
Required In Progress

MIN() i MAX() — znajdowanie wartości w kolumnie

MIN() - znajdowanie najmniejszej wartości w kolumnie

MIN() zwraca najmniejszą wartość w zbiorze. Działa na liczbach, datach oraz tekście (w przypadku tekstu zwraca wartość pierwszą w kolejności alfabetycznej). Wartości NULL są ignorowane.

Przykłady:

  • Liczby — Jaka jest cena najtańszego produktu?
SELECT MIN(Cena) FROM Produkty;
  • Daty — Jaka jest data urodzenia najstarszego ucznia?
SELECT MIN(DataUrodzenia) FROM Uczniowie;

MAX() - znajdowanie największej wartości w kolumnie

MAX() zwraca największą wartość w zbiorze. Podobnie jak MIN(), działa na liczbach, datach i tekście (dla tekstu zwraca wartość ostatnią alfabetycznie). Wartości NULL są ignorowane.

Przykłady:

  • Liczby — Jaka jest najwyższa średnia w szkole?
SELECT MAX(Srednia) FROM Uczniowie;
  • Tekst — Jakie jest ostatnie nazwisko na liście alfabetycznej?
SELECT MAX(Nazwisko) FROM Uczniowie;  -- np. 'Żyła'

Użycie funkcji agregujących na całej tabeli

Jeśli funkcja agregująca (np. MIN(), MAX(), AVG(), COUNT()) jest użyta w SELECT bez klauzuli GROUP BY, działa na całej tabeli (dokładniej: na wszystkich wierszach, które przeszły przez filtr WHERE, jeśli taki istnieje). Wynikiem jest zawsze jeden wiersz z jedną lub wieloma kolumnami zawierającymi obliczone wartości.

Można łączyć wiele funkcji agregujących w jednym zapytaniu. Używaj aliasów (AS), aby nadać czytelne nazwy kolumnom wynikowym.

SELECT
  COUNT(*) AS LiczbaUczniow,
  AVG(Srednia) AS SredniaOcenKlasy,
  MAX(Srednia) AS NajwyzszaSrednia,
  MIN(Srednia) AS NajnizszaSrednia
FROM Uczniowie
WHERE Klasa = '3A';

To zapytanie zwróci jeden wiersz z czterema kolumnami, podsumowującymi klasę '3A'.

Dodatkowe przykłady użycia

  • MIN/MAX z filtrem:

    SELECT MIN(Cena) AS Najtansza, MAX(Cena) AS Najdrozsza
    FROM Produkty
    WHERE Kategoria = 'Elektronika';
  • MIN/MAX na tekście (alfabetycznie):

    SELECT MIN(Nazwisko) AS PierwszeNazwisko, MAX(Nazwisko) AS OstatnieNazwisko
    FROM Uczniowie;
  • MIN/MAX na datach:

    SELECT MIN(DataZamowienia) AS NajstarszeZamowienie,
           MAX(DataZamowienia) AS NajnowszeZamowienie
    FROM Zamowienia;
  • Porównanie z AVG (np. znaleźć uczniów z najwyższą średnią powyżej średniej klasy — przykład z użyciem GROUP BY i HAVING poznasz w dalszych lekcjach):

    -- (Przykład informacyjny; GROUP BY omówiony osobno)
    SELECT Klasa, AVG(Srednia) AS SredniaKlasy
    FROM Uczniowie
    GROUP BY Klasa
    HAVING AVG(Srednia) > 4.0;

Wskazówki i uwagi

  • Wartości NULL są pomijane przez agregaty — jeśli kolumna zawiera tylko NULL, wynik MIN() lub MAX() będzie NULL.
  • Przy agregacji na całej tabeli wynik to zawsze jedno wiersz — jeśli chcesz statystyki dla grup (np. dla każdej klasy osobno), użyj GROUP BY (omówione w dalszej lekcji).
  • Używaj aliasów (AS), aby nagłówki kolumn w wynikach były czytelne i przyjazne dla raportów lub dalszego przetwarzania w aplikacji.

Omówienie funkcji agregujących (COUNT, SUM, AVG i inne) znajdziesz w materiałach lekcji o funkcjach agregujących.

Więcej o grupowaniu i filtrowaniu grup (GROUP BY, HAVING) oraz o tym, jak działają agregaty na grupach, jest w lekcji poświęconej filtrowaniu grup.