Класс Avg

Класс Avg применяется в методах aggregate и annotate для вычисления среднего значения указанного поля. Он возвращает объект класса Avg, который можно использовать в запросах к базе данных для получения статистической информации о числовых полях. Класс принимает аргумент - имя поля, по которому необходимо вычислить среднее, а также может принимать дополнительные параметры, такие как filter для применения условий к агрегации.

Синтаксис

pythonfrom django.db.models import Avg

Model.objects.aggregate(Avg('field_name'))
Model.objects.annotate(avg_value=Avg('field_name'))

Пример

Вычислим среднюю цену всех товаров в магазине:

pythonfrom django.db.models import Avg
from myapp.models import Product

res = Product.objects.aggregate(Avg('price'))
print(res)

Результат выполнения кода:

python{"price__avg": 245.75}

Пример

Применим агрегацию с условием, вычислив среднюю цену только товаров с рейтингом выше 4:

pythonfrom django.db.models import Avg, Q
from myapp.models import Product

res = Product.objects.filter(rating__gt=4).aggregate(Avg('price'))
print(res)

Результат выполнения кода:

python{"price__avg": 312.50}

Пример

Используем annotate для добавления среднего значения к каждому объекту в QuerySet. Например, вычислим средний возраст пользователей в каждой категории:

pythonfrom django.db.models import Avg
from myapp.models import Category, User

res = Category.objects.annotate(
  avg_age=Avg('users__age')
).values('name', 'avg_age')
print(res)

Результат выполнения кода:

python[{"name": "category1", "avg_age": 25.5}, {"name": "category2", "avg_age": 30.0}]

Пример

Применим условную агрегацию с использованием параметра filter, чтобы вычислить среднюю цену только для активных товаров:

pythonfrom django.db.models import Avg, Q
from myapp.models import Product

res = Product.objects.aggregate(
  avg_active_price=Avg('price', filter=Q(is_active=True))
)
print(res)

Результат выполнения кода:

python{"avg_active_price": 180.25}

Смотрите также

  • класс Count,
    который подсчитывает количество записей
  • класс Sum,
    который вычисляет сумму значений поля
  • класс Min,
    который находит минимальное значение
  • класс Max,
    который находит максимальное значение