Wskakujemy w świat ekstremów w danych — szukanie minimalnych i maksymalnych wartości. Spokojnie, SQL nie zmusi Cię do nauki czegoś zupełnie nowego, ale nauczysz się wyciągać największe i najmniejsze wartości z tabeli. Te funkcje są wszędzie: od analizy ocen filmów na IMDb po wyliczanie minimalnej temperatury na Marsie.
MIN() i MAX() to funkcje agregujące, które zwracają minimalną i maksymalną wartość z zestawu danych. Działają jak dobrzy łowcy ekstremów: MIN() szuka najmniejszego elementu, a MAX() — największego. Możesz ich używać nie tylko do liczb: możesz szukać minimalnego i maksymalnego tekstu albo daty.
-- Ogólna forma funkcji MIN i MAX
SELECT
MIN(column_name) AS min_value,
MAX(column_name) AS max_value
FROM table_name;
Prosto i przyjemnie! Teraz zobaczmy, jak ta magia działa w różnych scenariuszach.
Składnia i podstawowe przykłady
Dane liczbowe
Załóżmy, że mamy tabelę employees, gdzie jest kolumna z pensjami pracowników (salary).
Chcemy poznać minimalną i maksymalną pensję.
Tabela employees
| id | name | salary |
|---|---|---|
| 1 | Anna Song | 45000 |
| 2 | Otto Art | 30000 |
| 3 | Maria Chi | 120000 |
| 4 | Alex Lin | 90000 |
| 5 | Eva Tan | 60000 |
-- Przykład dla danych liczbowych
SELECT
MIN(salary) AS min_salary,
MAX(salary) AS max_salary
FROM employees;
Wynik
| min_salary | max_salary |
|---|---|
| 30000 | 120000 |
Dane tekstowe
Możesz używać MIN() i MAX() z danymi tekstowymi.
Porównywane są alfabetycznie (tak, nawet litery mogą być "najmniejsze" i "największe").
Załóżmy, że mamy tabelę students, gdzie w kolumnie name są imiona studentów.
Tabela students
| id | name |
|---|---|
| 1 | Anna |
| 2 | Otto |
| 3 | Maria |
| 4 | Ben |
| 5 | Zoe |
-- Przykład dla danych tekstowych
SELECT
MIN(name) AS first_name_in_order,
MAX(name) AS last_name_in_order
FROM students;
Wynik
| first_name_in_order | last_name_in_order |
|---|---|
| Anna | Zoe |
Daty i czas
Szukamy najwcześniejszej i najpóźniejszej daty z tabeli events.
Tabela events
| id | event_name | event_date |
|---|---|---|
| 1 | New Year Party | 2023-01-01 |
| 2 | Summer Fest | 2023-06-15 |
| 3 | Halloween Bash | 2023-10-31 |
| 4 | Year End Gala | 2023-12-31 |
-- Przykład dla dat
SELECT
MIN(event_date) AS earliest_date,
MAX(event_date) AS latest_date
FROM events;
Wynik
| earliest_date | latest_date |
|---|---|
| 2023-01-01 | 2023-12-31 |
Użycie MIN() i MAX() w tabelach z NULL
Jeśli w kolumnie są wartości NULL, możesz spać spokojnie: SQL je ignoruje przy obliczeniach.
To znaczy, że MIN() i MAX() będą działać tylko na "normalnych" wartościach.
Tabela employees_with_null
| id | name | salary |
|---|---|---|
| 1 | Otto | 30000 |
| 2 | Maria | NULL |
| 3 | Anna | 120000 |
| 4 | John | NULL |
-- Tabela z NULL
SELECT
MIN(salary) AS min_salary,
MAX(salary) AS max_salary
FROM employees_with_null;
Jeśli w kolumnie salary są rekordy z NULL, po prostu są pomijane.
| min_salary | max_salary |
|---|---|
| 30000 | 120000 |
Ale jeśli CAŁA kolumna to NULL, wynikiem będzie NULL.
Przykłady użycia MIN() i MAX() w realnych zadaniach
Określanie najstarszego i najmłodszego pracownika
Tabela employees
| id | name | birth_date |
|---|---|---|
| 1 | Otto | 1980-05-10 |
| 2 | Maria | 1990-11-20 |
| 3 | Anna | 1975-03-15 |
| 4 | John | 2000-08-01 |
W tabeli employees jest pole birth_date, które przechowuje daty urodzenia pracowników. Określmy najstarszego i najmłodszego.
SELECT
MIN(birth_date) AS oldest_employee,
MAX(birth_date) AS youngest_employee
FROM employees;
Wynik:
| oldest_employee | youngest_employee |
|---|---|
| 1975-03-15 | 2000-08-01 |
Analiza sprzedaży
| id | amount |
|---|---|
| 1 | 150.00 |
| 2 | 75.50 |
| 3 | 200.00 |
| 4 | 120.00 |
| 5 | 500.00 |
| 6 | 90.00 |
W tabeli sales jest pole amount, które przechowuje kwoty sprzedaży. Znajdźmy minimalną i maksymalną kwotę sprzedaży.
SELECT
MIN(amount) AS smallest_sale,
MAX(amount) AS largest_sale
FROM sales;
Wynik zapytania
| smallest_sale | largest_sale |
|---|---|
| 75.50 | 500.00 |
Szukanie pierwszych i ostatnich zamówień
Jeśli masz tabelę orders z polem order_date, możesz łatwo sprawdzić pierwszą i ostatnią datę zamówienia.
Wyjściowa tabela orders
| order_id | customer_id | order_date | amount |
|---|---|---|---|
| 101 | 1 | 2023-01-15 10:23:00 | 250.00 |
| 102 | 2 | 2023-02-10 14:45:00 | 150.00 |
| 103 | 3 | 2023-01-05 09:10:00 | 300.00 |
| 104 | 1 | 2023-03-22 16:30:00 | 500.00 |
| 105 | 4 | 2023-01-25 11:00:00 | 120.00 |
SELECT
MIN(order_date) AS first_order,
MAX(order_date) AS last_order
FROM orders;
Wynik zapytania:
| first_order | last_order |
|---|---|
| 2023-01-05 09:10:00 | 2023-03-22 16:30:00 |
Specyfika działania MIN() i MAX()
Porównywanie tekstów: przy pracy z tekstami MIN() i MAX() porównują je alfabetycznie.
Praca z NULL: NULL jest ignorowany, jeśli w kolumnie są inne wartości. Ale jeśli wszystkie wartości to NULL, wynikiem będzie NULL.
Porównywanie dat: SQL bierze pod uwagę nie tylko rok, ale też miesiąc, dzień, godziny, minuty.
GO TO FULL VERSION