← Все вопросы

Как найти максимум, минимум и среднее значение в SQL (MAX, MIN, AVG)?

Задан 20 месяцев назад173 просмотров2 ответа
8

Нужно по таблице зарплат узнать самую высокую, самую низкую и среднюю зарплату. Как посчитать максимум, минимум и среднее в SQL? Это отдельные функции или один запрос?

2 ответа

13
✓ Принятый ответ — помог автору

Это агрегатные функции, и их можно считать в одном запросе:

SELECT
  MAX(salary) AS max_salary,
  MIN(salary) AS min_salary,
  AVG(salary) AS avg_salary
FROM employees;
  • MAX — наибольшее значение,
  • MIN — наименьшее,
  • AVG — среднее арифметическое,
  • SUM — сумма (тоже из этой компании).

Нюансы, о которых надо знать:

  1. NULL игнорируются. Если у части сотрудников зарплата NULL, AVG посчитает среднее только по непустым. То есть среднее = сумма непустых / количество непустых, а не / общее число строк.

  2. AVG может дать дробь. Если столбец целочисленный, в некоторых СУБД (например, при делении целых) результат может округлиться. Для точности приводите к дробному типу: AVG(salary::numeric) в Postgres или AVG(CAST(salary AS DECIMAL)).

  3. MAX и MIN работают не только с числами, но и с датами (MAX(created_at) — самая поздняя дата) и текстом (по алфавиту).

Если нужно найти максимум по каждой группе (например, макс. зарплата в каждом отделе), добавьте GROUP BY:

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

Важная тонкость: MAX(salary) вернёт само значение максимальной зарплаты, но не строку сотрудника, который её получает. Если нужны имя и зарплата самого высокооплачиваемого, одного MAX мало — используйте ORDER BY salary DESC LIMIT 1 или подзапрос. Это классическая ловушка: люди пишут SELECT name, MAX(salary) без GROUP BY и получают ошибку или мусор.

Ваш ответ

, чтобы ответить на вопрос.