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() Склеивает все значения группы в одну строку
Это не полный список агрегатных функций, но остальные очень специфические и я не думаю, что ты будешь ими пользоваться в ближайшие лет 5. Если же они все же вам понадобятся, вы всегда можете почитать официальную документацию по вашей СУБД.

А теперь давай рассмотрим несколько примеров с нашими агрегатными функциями.

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 тысяч, но это директор.

А вот средняя зарплата слишком высокая, нужно как-то оптимизировать затраты. Наймем еще одного кота и дело с концом :)

undefined
1
Задача
Модуль 4. Работа с БД, 2 уровень, 5 лекция
Недоступна
task0252
Напиши запрос, который из таблицы cars выберет название (name) и сумму стоимостей (price).
undefined
1
Задача
Модуль 4. Работа с БД, 2 уровень, 5 лекция
Недоступна
task0253
Напиши запрос, который из таблицы автомобилей (cars) выберет название (name) и сумму стоимостей (price). В результат должны попасть только те авто, сумма стоимостей которых более 200000.
undefined
1
Задача
Модуль 4. Работа с БД, 2 уровень, 5 лекция
Недоступна
task0254
Напиши запрос, который из таблицы автомобилей (cars) выберет название (name), минимальную и максимальную стоимость (price).
undefined
1
Задача
Модуль 4. Работа с БД, 2 уровень, 5 лекция
Недоступна
task0255
Напиши запрос, который из таблицы автомобилей (cars) выберет название (name), минимальную и максимальную стоимость (price). В результат должны попасть только те авто, максимальная стоимость которых менее 200000.
undefined
1
Задача
Модуль 4. Работа с БД, 2 уровень, 5 лекция
Недоступна
task0256
Напиши запрос, который из таблицы автомобилей (cars) выберет название (name), суммарную и среднюю стоимость (price).
undefined
1
Задача
Модуль 4. Работа с БД, 2 уровень, 5 лекция
Недоступна
task0257
Напиши запрос, который из таблицы автомобилей (cars) выберет название (name), среднюю и суммарную стоимость (price). В результат должны попасть только те авто, средняя стоимость которых более 100000.
undefined
1
Задача
Модуль 4. Работа с БД, 2 уровень, 5 лекция
Недоступна
task0258
Напиши запрос, который из таблицы employee выберет позиции (position) и список имен (name) сотрудников на каждой позиции. Используй GROUP_CONCAT.
undefined
1
Задача
Модуль 4. Работа с БД, 2 уровень, 5 лекция
Недоступна
task0259
Напиши запрос, который из таблицы employee выберет позиции (position) и список имен (name) сотрудников на каждой позиции. В выборку должны попасть только позиции со словом 'developer' в названии. Используй GROUP_CONCAT и HAVING.
undefined
1
Задача
Модуль 4. Работа с БД, 2 уровень, 5 лекция
Недоступна
task0260
Напиши запрос, который из таблицы employee выберет рейтинг (rating) сотрудников и список имен (name) сотрудников с данным рейтингом. В выборку должны попасть только те, у кого рейтинг выше 2 (строго больше). Результат выведи в порядке возрастания рейтинга.