Давай зануримось у світ крайнощів у даних — пошуку мінімальних і максимальних значень. Не хвилюйся, SQL не змусить вчити щось принципово нове, зате ми навчимось знаходити найбільші та найменші значення даних у таблицях. Ці функції використовуються всюди: від аналізу рейтингів фільмів на IMDb до обчислення мінімальної температури на Марсі.
MIN() і MAX() — це агрегатні функції, які повертають мінімальне та максимальне значення з набору даних. Вони працюють як добрі мисливці за екстремумами: MIN() шукає найменший елемент, а MAX() — навпаки, найбільший. Їх використання не обмежується лише числами: ти можеш шукати мінімальні та максимальні рядки або дати.
-- Загальна форма функцій MIN та MAX
SELECT
MIN(column_name) AS min_value,
MAX(column_name) AS max_value
FROM table_name;
Легко і просто! А тепер подивимось, як ця магія працює в різних сценаріях.
Синтаксис і базові приклади
Числові дані
Припустимо, у нас є таблиця employees, у якій є стовпець із зарплатами співробітників (salary).
Ми хочемо дізнатись мінімальну та максимальну зарплати.
Таблиця employees
| id | name | salary |
|---|---|---|
| 1 | Anna Song | 45000 |
| 2 | Otto Art | 30000 |
| 3 | Maria Chi | 120000 |
| 4 | Alex Lin | 90000 |
| 5 | Eva Tan | 60000 |
-- Приклад для числових даних
SELECT
MIN(salary) AS min_salary,
MAX(salary) AS max_salary
FROM employees;
Результат
| min_salary | max_salary |
|---|---|
| 30000 | 120000 |
Текстові дані
Ти можеш використовувати MIN() і MAX() з текстовими даними.
Вони порівнюються за алфавітним порядком (так, навіть букви можуть бути "найменшими" і "найбільшими").
Припустимо, у нас є таблиця students, де у стовпці name зберігаються імена студентів.
Таблиця students
| id | name |
|---|---|
| 1 | Anna |
| 2 | Otto |
| 3 | Maria |
| 4 | Ben |
| 5 | Zoe |
-- Приклад для текстових даних
SELECT
MIN(name) AS first_name_in_order,
MAX(name) AS last_name_in_order
FROM students;
Результат
| first_name_in_order | last_name_in_order |
|---|---|
| Anna | Zoe |
Дати та час
Шукаємо найранішу і найпізнішу дату з таблиці events.
Таблиця 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 |
-- Приклад для роботи з датами
SELECT
MIN(event_date) AS earliest_date,
MAX(event_date) AS latest_date
FROM events;
Результат
| earliest_date | latest_date |
|---|---|
| 2023-01-01 | 2023-12-31 |
Використання MIN() і MAX() у таблицях з NULL-значенням
Якщо у стовпці є значення NULL, можеш спати спокійно: SQL ігнорує їх при обчисленнях.
Це означає, що MIN() і MAX() працюватимуть тільки з "нормальними" значеннями.
Таблиця employees_with_null
| id | name | salary |
|---|---|---|
| 1 | Otto | 30000 |
| 2 | Maria | NULL |
| 3 | Anna | 120000 |
| 4 | John | NULL |
-- Таблиця з NULL
SELECT
MIN(salary) AS min_salary,
MAX(salary) AS max_salary
FROM employees_with_null;
Якщо у стовпці salary є записи з NULL, вони просто ігноруються.
| min_salary | max_salary |
|---|---|
| 30000 | 120000 |
Але якщо ВЕСЬ стовпець складається з NULL, результатом буде NULL.
Приклади використання MIN() і MAX() у реальних задачах
Визначення найстаршого і наймолодшого співробітника
Таблиця 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 |
У таблиці employees є поле birth_date, яке зберігає дати народження співробітників. Визначимо найстаршого і наймолодшого.
SELECT
MIN(birth_date) AS oldest_employee,
MAX(birth_date) AS youngest_employee
FROM employees;
Результат:
| oldest_employee | youngest_employee |
|---|---|
| 1975-03-15 | 2000-08-01 |
Аналіз продажів
| id | amount |
|---|---|
| 1 | 150.00 |
| 2 | 75.50 |
| 3 | 200.00 |
| 4 | 120.00 |
| 5 | 500.00 |
| 6 | 90.00 |
У таблиці sales є поле amount, яке зберігає суми продажів. Знайдемо мінімальну і максимальну суму продажу.
SELECT
MIN(amount) AS smallest_sale,
MAX(amount) AS largest_sale
FROM sales;
Результат запиту
| smallest_sale | largest_sale |
|---|---|
| 75.50 | 500.00 |
Пошук найперших і найостанніших замовлень
Якщо у тебе є таблиця orders з полем order_date, можна легко дізнатись першу і останню дату замовлення.
Початкова таблиця 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;
Результат запиту:
| first_order | last_order |
|---|---|
| 2023-01-05 09:10:00 | 2023-03-22 16:30:00 |
Особливості роботи MIN() і MAX()
Порівняння текстів: при роботі з рядками MIN() і MAX() порівнюють їх за алфавітом.
Робота з NULL: NULL ігнорується, якщо у стовпці є інші значення. Але якщо всі значення NULL, результат буде NULL.
Порівняння дат: SQL враховує не лише числове значення року, а й місяць, день, години, хвилини.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ