Агрегатные функции
Агрегатная функция принимает список значений и возвращает одно значение. Наиболее часто используемыми агрегатными функциями являются count, Max, Min, Avg и Sum.
count()
Подсчитывает количество объектов в QuerySet. Может использоваться для подсчета всех объектов в таблице базы данных:
>>> Worker.objects.count()
9
Или используется для подсчета количества объектов, возвращенных запросом:
>>> Worker.objects.filter(last_name='Smith').count()
3
Для того, чтобы получить уже агрегированные данные, нужно воспользоваться методом .aggregate(), вызвав его у имеющегося менеджера или QuerySet. Этот метод принимает в качестве параметров так называемые агрегирующие функции. Функций этих достаточно много, но все они используются примерно одинаково.
Чтобы работать со следующими методами, мы должны в шелле импортировать их:
from django.db.models import Max, Min, Avg, Sum
Max()
Возвращает Max() максимальное значение в наборе значений. Он принимает столбец, для которого вы хотите получить наибольшее значение.
Например, в следующем примере используется метод Max() для возврата самого высокого возраста сотрудника:
Worker.objects.aggregate(Max('age'))
Выполняет SQL MAX() для столбца возраста в таблице и возвращает самый высокий возраст сотрудника.
Min()
Метод Min() возвращает минимальное значение в наборе значений. Как и Max(), он принимает столбец, для которого вы хотите получить наименьшее значение.
В следующем примере используется Min() для возврата самого низкого возраста сотрудника:
Worker.objects.aggregate(Min('age'))
Функция Min() выполняет функцию SQL MIN(), которая возвращает минимальное значение в столбце возраста.
Avg()
Метод возвращает среднее значение в наборе значений. Он принимает имя столбца и возвращает среднее значение всех значений в этом столбце:
Worker.objects.aggregate(Avg('age'))
Незаметно Avg() выполняет функцию SQL AVG() для столбца возраста и возвращает средний возраст сотрудников.
Sum()
Метод возвращает сумму значений. Например, вы можете использовать Sum() для расчета общего возраста сотрудников компании:
Worker.objects.aggregate(Sum('age'))
Выполняет функцию SQL SUM() и возвращает общее значение всех значений в столбце 'age' таблицы.