= models.CharField(max_length=100)
date_of_sale = models.DateTimeField()
num_ratings = models.IntegerField()
price = models.IntegerField()
была задача посчитать среднюю цену и средний рейтинг продаж по дням
составил запрос через group by
Product.objects.annotate(day=TruncDay('date_of_sale').\
values('day'). \
annotate(
avg_stars=('num_ratings'),
avg_price=('price')
).order_by('day')
теперь, как поделить эти данные по интервалам?
- утро с 8.00 по 11.00
- день с 11.00 по 18.00
- вечер с 18.00 по 23.00
на выходе ожидается результат:
stats_per_day_part = [
{
'day': '01.01.2019',
'morning': {
'avg_stars': 3.4,
'avg_price': 350
},
'afternoon': {
'avg_stars': 3.4,
'avg_price': 350
},
'evening': {
'avg_stars': 3.4,
'avg_price': 350
}
},
...
]
Например, добавить через case/when ещё одно поле (morning/evening/afternoon), группировать сразу по двум полям (дата + интервал), а потом список дата1 - утро - avg_stars - avg_price дата1 - день - avg_stars - avg_price дата1 - вечер- avg_stars - avg_price дата2 - утро - avg_stars - avg_price доработать напильником силами питона.
Обсуждают сегодня