РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
140 of 818 menu

Класс Avg

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

Синтаксис

from django.db.models import Avg Model.objects.aggregate(Avg('field_name')) Model.objects.annotate(avg_value=Avg('field_name'))

Пример

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

from django.db.models import Avg from myapp.models import Product res = Product.objects.aggregate(Avg('price')) print(res)

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

{"price__avg": 245.75}

Пример

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

from django.db.models import Avg, Q from myapp.models import Product res = Product.objects.filter(rating__gt=4).aggregate(Avg('price')) print(res)

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

{"price__avg": 312.50}

Пример

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

from 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)

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

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

Пример

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

from 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)

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

{"avg_active_price": 180.25}

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

  • класс Count,
    который подсчитывает количество записей
  • класс Sum,
    который вычисляет сумму значений поля
  • класс Min,
    который находит минимальное значение
  • класс Max,
    который находит максимальное значение
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить