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

Метод aggregate

Метод aggregate применяется к QuerySet и возвращает словарь с вычисленными агрегатными значениями. Он выполняет SQL-запрос с агрегирующими функциями над полями модели. Метод принимает именованные аргументы, где ключ - это имя результата, а значение - экземпляр класса агрегации. Метод не изменяет исходный QuerySet и вычисляет значения непосредственно в базе данных.

Синтаксис

from django.db.models import Sum, Avg, Count, Max, Min result = Model.objects.aggregate(aggregate_name=AggregateFunction('field'))

Пример . С суммой

Давайте вычислим общее количество просмотров всех статей:

from myapp.models import Article from django.db.models import Sum res = Article.objects.aggregate(total_views=Sum('views_count')) print(res)

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

{"total_views": 1250}

Пример . Со средним значением

Рассчитаем среднюю оценку всех книг:

from myapp.models import Book from django.db.models import Avg res = Book.objects.aggregate(average_rating=Avg('rating')) print(res)

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

{"average_rating": 4.5}

Пример . С максимальным значением

Найдем максимальную цену товара:

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

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

{"max_price": 999.99}

Пример . С минимальным значением

Найдем минимальную цену товара:

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

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

{"min_price": 99.99}

Пример . С количеством записей

Подсчитаем общее количество опубликованных статей:

from myapp.models import Article from django.db.models import Count res = Article.objects.filter(status='published').aggregate(total_articles=Count('id')) print(res)

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

{"total_articles": 15}

Пример . С несколькими агрегациями

Вычислим одновременно сумму, среднее, минимум и максимум для поля цены:

from myapp.models import Product from django.db.models import Sum, Avg, Max, Min res = Product.objects.aggregate( total_sum=Sum('price'), average_price=Avg('price'), max_price=Max('price'), min_price=Min('price') ) print(res)

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

{"total_sum": 15000.50, "average_price": 250.01, "max_price": 999.99, "min_price": 49.99}

Пример . С фильтрацией перед агрегацией

Вычислим сумму просмотров только для опубликованных статей:

from myapp.models import Article from django.db.models import Sum res = Article.objects.filter(status='published').aggregate(published_views=Sum('views_count')) print(res)

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

{"published_views": 980}

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

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