6.1 Список агрегатных функций
Когда ты используешь группировку строк в SQL с помощью оператора GROUP BY
, то можешь использовать в операторе SELECT
функции, которые работают над сгруппированными данными. Такие функции еще называют агрегатными функциями.
Вот список самых популярных из них:
# | Функция | Описание |
---|---|---|
1 | COUNT() | Возвращает количество значений в группе |
2 | SUM() | Возвращает сумму значений в группе |
3 | MAX() | Возвращает максимальное значение группы |
4 | MIN() | Возвращает минимальное значение группы |
5 | AVG() | Возвращает среднее значение группы |
6 | BIT_AND() | Выполняет побитовое AND над всеми значениями группы |
7 | BIT_OR() | Выполняет побитовое OR над всеми значениями группы |
8 | BIT_XOR() | Выполняет побитовое XOR над всеми значениями группы |
9 | GROUP_CONCAT() | Склеивает все значения группы в одну строку |
А теперь давай рассмотрим несколько примеров с нашими агрегатными функциями.
6.2 Анализируем зарплаты сотрудников
Давай вычислим некоторую статистику по нашим сотрудникам из таблицы employee.
Вопрос первый: сколько у нас сотрудников?
Если мы хотим узнать количество всех записей в таблице, то для этого можно использовать агрегатную функцию COUNT
. Запрос будет выглядеть так:
SELECT COUNT(*) FROM employee
И в качестве ответа MySQL вернет число 6. У нас 6 сотрудников в отделе, включая кота. Все верно.
Вопрос второй: сколько мы платим в месяц всем сотрудникам?
Чтобы ответить на этот вопрос нам нужно просуммировать зарплаты всех сотрудников. Для этого воспользуемся агрегатной функцией SUM()
Запрос будет выглядеть так:
SELECT SUM(salary) FROM employee
Обрати внимание, что в этот раз мы обязаны указать значения какой колонки мы суммируем. Мы указали колонку salary. Мы же не можем просто просуммировать все поля таблицы.
И в качестве ответа MySQL вернет число 461000. У нас 6 сотрудников в отделе, а зарплата 461 тысяча. Многовато.
И наконец третий вопрос: какая у нас максимальная и минимальная зарплаты в отделе? Ну и еще давайте среднюю зарплату посчитаем. Для этого нам понадобятся функции MIN
, MAX
и AVG
.
Запрос будет немного посложнее в этот раз выглядеть так:
SELECT MIN(salary), AVG(salary), MAX(salary)
FROM employee
Результат этого запроса будет таким:
MIN(salary) | AVG(salary) | MAX(salary) |
---|---|---|
1000 | 76833.3333 | 200000 |
Минимальная зарплата в нашем отделе 1000 долларов – очень хорошо. Максимальная зарплата – 200 тысяч, но это директор.
А вот средняя зарплата слишком высокая, нужно как-то оптимизировать затраты. Наймем еще одного кота и дело с концом :)
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ