Подсчет нескольких столбцов с помощью группировки в одном запросе с использованием Django ORM - PullRequest
0 голосов
/ 14 октября 2018

У меня есть таблица, которая имеет четыре столбца (создан, истекает, активирован, обновлен), а тип данных - DateTime. Я хочу количество отсчетов для всех четырех столбцов для каждой даты.

table1.objects.annotate(dt=Truncmonth('created')).values('dt').orderby().annotate(Count('dt'))
table1.objects.annotate(dte=Truncmonth('expires')).values('dte').orderby().annotate(Count('dte'))
table1.objects.annotate(dta=Truncmonth('activated')).values('dta').orderby().annotate(Count('dta'))
table1.objects.annotate(dtr=Truncmonth('renewed')).values('dtr').orderby().annotate(Count('dtr'))

Вышечетыре разных запроса, который дает мне дату и ее количество.Но я хочу получить дату и количество всех столбцов, что мне нужно, это число count_dt, count_dte, count_dta, count_dtr.Но я получаю date_dt, date_dte, date_dta, date_dtr, count_dt, count_dte, count_dta, count_dtr.Короче говоря, я хочу объединить четыре вышеуказанных запроса.

1 Ответ

0 голосов
/ 15 октября 2018

Вы можете использовать функцию Django Coalesce, чтобы выбрать первое ненулевое значение из всех столбцов дат, а затем аннотировать различные значения для каждого из значений месяцев:

from django.db.models.functions import TruncMonth, Coalesce
from django.db.models import Count    

table1.objects.annotate(month=Coalesce(TruncMonth('created'), TruncMonth('expires'), TruncMonth('activated'), TruncMonth('renewed)))
    .values('month')
    .annotate(nc=Count('created'), ne=Count('expires'), na=Count('activated'), nr=Count('renewed')

ВыводQuerySet с парами ключ-значение для ключей month, nc, ne, na, nr.

...