Давайте погрузимся в мир крайностей в данных — поиска минимальных и максимальных значений. Не переживайте, 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 учитывает не только числовое значение года, но и месяц, день, часы, минуты.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ