JavaRush /Курсы /SQL SELF /Минимальные и Максимальные значения: MIN() ...

Минимальные и Максимальные значения: MIN() и MAX()

SQL SELF
7 уровень , 4 лекция
Открыта

Давайте погрузимся в мир крайностей в данных — поиска минимальных и максимальных значений. Не переживайте, 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 учитывает не только числовое значение года, но и месяц, день, часы, минуты.

2
Задача
SQL SELF, 7 уровень, 4 лекция
Недоступна
Нахождение минимального и максимального количества
Нахождение минимального и максимального количества
2
Задача
SQL SELF, 7 уровень, 4 лекция
Недоступна
Нахождение самой старой и самой новой даты рождения
Нахождение самой старой и самой новой даты рождения
1
Опрос
Агрегация данных, 7 уровень, 4 лекция
Недоступен
Агрегация данных
Агрегация данных
Комментарии (4)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Ra Уровень 35 Student
23 августа 2025
В сложном запросе с джойнами вместо MIN/МАХ можно сделать ORDER BY unit_price ASC/DESC LIMIT 1; чтобы не делать подзапрос
Slevin Уровень 64
1 сентября 2025
Логично. И не заставляет базу пересчитывать все значения. 👍
2 января 2026
Сортировка так то более сложная операция если нет индекса
Anemon Уровень 13 Expert
14 августа 2025
🤓