← Назад к вопросам

Для чего нужна функция MAX в SQL?

1.0 Junior🔥 181 комментариев
#Базы данных и SQL

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

# Функция MAX в SQL

Определение

MAX — это агрегирующая функция (aggregate function) в SQL, которая возвращает максимальное (наибольшее) значение из набора значений указанного столбца. Она игнорирует значения NULL.

Основное назначение

1. Получение максимального значения

Максимально простое использование — найти наибольшее значение в столбце:

SELECT MAX(salary) FROM employees;
-- Результат: 150000 (наибольшая зарплата)

SELECT MAX(price) FROM products;
-- Результат: 999.99 (самый дорогой товар)

SELECT MAX(created_at) FROM posts;
-- Результат: 2026-03-22 12:30:45 (самый последний пост)

2. MAX с WHERE условием

Можно применять фильтры перед вычислением максимума:

SELECT MAX(salary) FROM employees WHERE department = IT;
-- Максимальная зарплата в отделе IT

SELECT MAX(price) FROM products WHERE category = Electronics;
-- Самый дорогой товар в категории Electronics

SELECT MAX(age) FROM users WHERE status = active;
-- Максимальный возраст активных пользователей

3. MAX с GROUP BY — максимум для каждой группы

Это одна из самых частых операций — найти максимальное значение для каждой группы:

SELECT 
    department, 
    MAX(salary) as max_salary
FROM employees
GROUP BY department;

-- Результат:
-- department | max_salary
-- IT         | 150000
-- HR         | 80000
-- Sales      | 120000

Пример 2: Максимальная цена товара по категориям

SELECT 
    category,
    MAX(price) as max_price,
    COUNT(*) as product_count
FROM products
GROUP BY category;

-- Результат:
-- category     | max_price | product_count
-- Electronics  | 1999.99   | 45
-- Clothing     | 299.99    | 120
-- Books        | 49.99     | 200

4. MAX в подзапросе

Максимальное значение можно использовать для фильтрации:

-- Найти сотрудника с максимальной зарплатой
SELECT * FROM employees
WHERE salary = (SELECT MAX(salary) FROM employees);

-- Найти товары с максимальной ценой в каждой категории
SELECT * FROM products
WHERE (category, price) IN (
    SELECT category, MAX(price) FROM products GROUP BY category
);

-- Найти постов с максимальным количеством комментариев
SELECT * FROM posts
WHERE comment_count = (SELECT MAX(comment_count) FROM posts);

5. MAX с HAVING условием

Фильтрация групп по максимальному значению:

-- Показать отделы, где максимальная зарплата больше 100000
SELECT 
    department,
    MAX(salary) as max_salary,
    COUNT(*) as employee_count
FROM employees
GROUP BY department
HAVING MAX(salary) > 100000;

-- Результат:
-- department | max_salary | employee_count
-- IT         | 150000     | 12
-- Sales      | 120000     | 8

6. MAX с разными типами данных

Числовые значения:

SELECT MAX(salary) FROM employees;      -- Числа
SELECT MAX(quantity) FROM inventory;     -- Целые числа
SELECT MAX(rating) FROM reviews;         -- Рейтинг

Строковые значения (лексикографический порядок):

SELECT MAX(username) FROM users;         -- "zebra" будет максимальной
SELECT MAX(city) FROM addresses;         -- Последний город в алфавитном порядке

Даты и время:

SELECT MAX(created_at) FROM orders;      -- Самая последняя дата
SELECT MAX(birth_date) FROM users;       -- Самый молодой пользователь

7. Сравнение MAX с другими агрегирующими функциями

SELECT 
    MAX(salary) as maximum,      -- Максимум
    MIN(salary) as minimum,      -- Минимум
    AVG(salary) as average,      -- Среднее
    SUM(salary) as total,        -- Сумма
    COUNT(*) as count            -- Количество
FROM employees;

-- Результат:
-- maximum | minimum | average  | total    | count
-- 150000  | 30000   | 75000.50 | 900006   | 12

8. Практические примеры

Пример 1: Найти последний заказ каждого клиента

SELECT 
    customer_id,
    MAX(order_date) as last_order_date
FROM orders
GROUP BY customer_id;

Пример 2: Найти самый популярный товар по продажам

SELECT 
    product_id,
    product_name,
    MAX(quantity_sold) as max_sold
FROM sales
GROUP BY product_id, product_name
ORDER BY max_sold DESC
LIMIT 1;

Пример 3: Найти старшего сотрудника в каждом отделе

SELECT 
    department,
    MAX(age) as oldest_employee_age
FROM employees
GROUP BY department;

Пример 4: Проверить максимальный ID для вставки

SELECT MAX(id) + 1 as next_id FROM users;
-- Используется для вычисления следующего ID (хотя обычно используются SEQUENCE)

9. Обработка NULL значений

Важное свойство: MAX игнорирует NULL значения

Столбец salary: [50000, 60000, NULL, 75000, NULL]
SELECT MAX(salary) FROM employees;  -- Результат: 75000 (NULL игнорируются)

-- Если все значения NULL
Столбец bonus: [NULL, NULL, NULL]
SELECT MAX(bonus) FROM employees;  -- Результат: NULL

10. MAX с CASE выражением

Можно использовать MAX вместе с условной логикой:

-- Максимальная зарплата мужчин
SELECT MAX(CASE WHEN gender = M THEN salary END) as max_male_salary
FROM employees;

-- Максимальная зарплата по полу и отделу
SELECT 
    gender,
    department,
    MAX(salary) as max_salary
FROM employees
GROUP BY gender, department;

11. Окна функции (Window Functions) с MAX

В современных СУБД (PostgreSQL 8.4+, MySQL 8.0+):

SELECT 
    employee_id,
    salary,
    department,
    MAX(salary) OVER (PARTITION BY department) as dept_max_salary,
    MAX(salary) OVER () as company_max_salary
FROM employees;

-- Результат показывает максимальную зарплату по отделам и в целой компании

Выводы

Функция MAX в SQL:

  • Возвращает максимальное (наибольшее) значение из набора
  • Игнорирует NULL значения
  • Часто используется с GROUP BY для получения максимума по группам
  • Работает с числами, строками и датами
  • Незаменима для аналитики и отчётов
  • Может использоваться в подзапросах и window functions