Модели Django - как правильно вычислять несколько значений с различными условиями
Я хочу вычислить несколько значений в одном запросе на моей модели. для каждой метрики должен быть свой фильтр (или вообще никаких фильтров). Я использую Django==2.2.3 и модель Djongo.
Колонки моей модели:
user_id = models.IntegerField(blank=True, null=True)
group_id = models.IntegerField(blank=True, null=True)
То, что я пытаюсь выполнить, предложенное в другой теме, у меня не работает. Запрос:
MyModel.objects.aggregate
(
total=Count('user_id'),
test=Count('user_id', filter=Q(user_id='just_a_fake_id')),
group_1_value=Count('user_id', filter=Q(group_id=1)),
group_2_value=Count('user_id', filter=Q(group_id=2)),
)
Результаты: {'total': 0, 'test': 47479, 'group_1_value': 47479, 'group_2_value': 47479}
,
не имеет смысла - все результаты (кроме total
) возвращают одно и то же число, которое является подсчетом всех записей
Я хочу выполнить запрос, подобный
SELECT COUNT(user_id) as total,
COUNT(CASE WHEN group_id=1 THEN user_id END) as group_1_value,
COUNT(CASE WHEN group_id=2 THEN user_id END) as group_2_value
FROM MyModel
Как мне нужно изменить запрос, чтобы получить правильные значения?