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 BYiHAVINGpoznasz 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()lubMAX()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.