JavaRush /Курсы /Модуль 4. Работа с БД /Агрегатные функции

Агрегатные функции

Модуль 4. Работа с БД
2 уровень , 5 лекция
Открыта

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

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

1
Задача
Модуль 4. Работа с БД, 2 уровень, 5 лекция
Недоступна
task0252
Напиши запрос, который из таблицы cars выберет название (name) и сумму стоимостей (price).
1
Задача
Модуль 4. Работа с БД, 2 уровень, 5 лекция
Недоступна
task0253
Напиши запрос, который из таблицы автомобилей (cars) выберет название (name) и сумму стоимостей (price). В результат должны попасть только те авто, сумма стоимостей которых более 200000.
1
Задача
Модуль 4. Работа с БД, 2 уровень, 5 лекция
Недоступна
task0254
Напиши запрос, который из таблицы автомобилей (cars) выберет название (name), минимальную и максимальную стоимость (price).
1
Задача
Модуль 4. Работа с БД, 2 уровень, 5 лекция
Недоступна
task0255
Напиши запрос, который из таблицы автомобилей (cars) выберет название (name), минимальную и максимальную стоимость (price). В результат должны попасть только те авто, максимальная стоимость которых менее 200000.
1
Задача
Модуль 4. Работа с БД, 2 уровень, 5 лекция
Недоступна
task0256
Напиши запрос, который из таблицы автомобилей (cars) выберет название (name), суммарную и среднюю стоимость (price).
1
Задача
Модуль 4. Работа с БД, 2 уровень, 5 лекция
Недоступна
task0257
Напиши запрос, который из таблицы автомобилей (cars) выберет название (name), среднюю и суммарную стоимость (price). В результат должны попасть только те авто, средняя стоимость которых более 100000.
1
Задача
Модуль 4. Работа с БД, 2 уровень, 5 лекция
Недоступна
task0258
Напиши запрос, который из таблицы employee выберет позиции (position) и список имен (name) сотрудников на каждой позиции. Используй GROUP_CONCAT.
1
Задача
Модуль 4. Работа с БД, 2 уровень, 5 лекция
Недоступна
task0259
Напиши запрос, который из таблицы employee выберет позиции (position) и список имен (name) сотрудников на каждой позиции. В выборку должны попасть только позиции со словом 'developer' в названии. Используй GROUP_CONCAT и HAVING.
1
Задача
Модуль 4. Работа с БД, 2 уровень, 5 лекция
Недоступна
task0260
Напиши запрос, который выберет из таблицы employee: - значение рейтинга (rating), - а также строку, содержащую список имён сотрудников с этим рейтингом, объединённых через запятую. Объединение имён должно быть выполнено с помощью агрегатной функции GROUP_CONCAT(name). Вывод должен осуществляться по группам рейтинга, а в результат должны попасть только те группы, где рейтинг строго больше 2. Отсортируй результат по возрастанию рейтинга.
Комментарии (15)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Anonymous #izrb# Уровень 1
3 января 2025
А куда пропал щелкун?
Константин Уровень 81
11 января 2025
Щелкун дуреет с этой прикормки.
28 апреля 2025
не щелкнул
Ольга Уровень 72 Expert
24 мая 2024
По последней задаче task0260 - где в условии написанно, что надо склеить значения name? В правильном ответе испоользуется group_concat. Добавьте хотя бы в условия это, а то как угадать формат вывода?
Иван Уровень 92 Expert
19 сентября 2023
Другой вопрос , зачем коту вообще платить ?
Вячеслав Уровень 75 Expert
26 октября 2023
чем-то еще, кроме еды)
Stroka Уровень 1
30 ноября 2023
1000 долларов лучше мне дайте я буду котом и еще на java писать буду
Anonymous #311541 Уровень 1
14 декабря 2023
чтобы потом забрать его зарплату себе)))
Андрей Уровень 109
17 ноября 2024
С бесплатным котом, средняя зарплата понизится до 65857$ - не на много. Коту бы подругу, со временем и наступит оптимизация затрат.
Madina Baizhanova Уровень 29
23 августа 2023
Ruslan Shamsiev Уровень 1
10 января 2023
6-9 врятли можно назвать популярными, скорее они в той стопке что через 5 лет
Евгений Уровень 22
29 ноября 2023
9 очень полезная, в MS SQL приходится вместо неё использовать select ... for xml path('').
Igor Уровень 1 Expert
4 ноября 2022
Надо набрать одних котов 😂
Владимир Уровень 109 Expert
29 ноября 2022
Мяу, йопта🤣
Daniel Уровень 51
29 июня 2023
А потом во время дедлайна можно честно говорить, что у вас лапки🙃