Группировать по нескольким полям и применять агрегацию - PullRequest
0 голосов
/ 27 февраля 2020

Я пытаюсь сгенерировать отчет из Postgres, используя Django ORM, который будет похож на следующий SQL запрос:

SELECT
    region,
    manager,
    report_group,
    SUM(
        CASE WHEN invoice_date BETWEEN '2020-01-01' AND '2020-01-31'
            THEN item_amount
            ELSE 0
        END
    ) as p1_spends
FROM
    A_TABLE_WITH_SOME_JOINS
GROUP BY
    region, manager, report_group

Я написал этот фрагмент

queryset = queryset.values("region", "manager", "report_group").order_by().annotate(
    p1_spends=Case(
        When(invoice__invoice_date__range=('2020-01-01', '2020-01-31'), then=Sum('item_amount')),
            default=Value(0),
            output_field=FloatField()
        )
    )
)

Я надеялся получить набор результатов, в котором строки сгруппированы по региону, менеджеру и группе отчетов, а функция агрегирования применена к полю item_amount, а набор результатов сгруппирован по региону, менеджеру, группе отчетов и дате выставления счета.

Как получить ожидаемый результат?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...