Я пытаюсь создать отчет, который показывает количество мужчин, женщин и общее количество клиентов в данный день за час.
Данные вставляются в базу данных как транзакция, когда кто-либо входит в здание. Там хранится их пол.
Запрос для сбора данных выглядит следующим образом:
initial_query = EventTransactions.objects.using('reportsdb')
.filter(building_id=id,
actualdatetime__lte=end_date,
actualdatetime__gte=beg_date)
Оттуда я аннотирую запрос для извлечения даты:
ordered_query = initial_query.annotate(
year=ExtractYear('actualdatetime'),
month=ExtractMonth('actualdatetime'),
day=ExtractDay('actualdatetime'),
hour=ExtractHour('actualdatetime'),
male=Coalesce(Sum(Case(When(customer_gender='M', then=1)), output_field=IntegerField()), Value(0)),
female=Coalesce(Sum(Case(When(customer_gender='F', then=1)), output_field=IntegerField()), Value(0))
).values(
'year', 'month', 'day', 'hour', 'male', 'female'
)
Как я могу затем суммировать клиентов-мужчин и женщин-клиентов по часам?
Под этим я подразумеваю, что я sh предоставлю пользователю таблицу, которая содержит каждый час дня (может просто на данном этапе это число от 0 до 23), общее количество мужчин за этот час, общее количество женщин за этот час и общее количество клиентов за этот час:
TIME | MALE | FEMALE | TOTAL
0 12 4 16
1 5 8 13
2 2 3 5
3 20 38 58
etc.
Я был бы рад предоставить дополнительную информацию, если нужно. Спасибо!