我有一个结果查询集,其中包含带注释的数据。我想进一步按小时分组,并希望将小时的另一个列号相加。 例如,我有一个查询集:-
<QuerySet [{'hour': 10, 'num_time': 101}, {'hour': 10, 'num_time': 1}, {'hour': 10, 'num_time': 2}, {'hour': 10, 'num_time': 4}, {'hour': 10, 'num_time': 1}, {'hour': 10, 'num_time': 13}, {'hour': 10, 'num_time': 6}, {'hour': 10, 'num_time': 2}, {'hour': 10, 'num_time': 3}, {'hour': 10, 'num_time': 8}, {'hour': 10, 'num_time': 4}, {'hour': 10, 'num_time': 6}, {'hour': 10, 'num_time': 1}, {'hour': 10, 'num_time': 3}, {'hour': 10, 'num_time': 18}, {'hour': 10, 'num_time': 3}, {'hour': 10, 'num_time': 19}, {'hour': 10, 'num_time': 3}, {'hour': 10, 'num_time': 14}, {'hour': 10, 'num_time': 4}, '...(remaining elements truncated)...']>
我想要以下结果:-
[{'hour': 10, 'num_time' : 210},{'hour': 18, 'num_time': 30}]
如何使用Django queryset实现?
这是我对第一个查询集重新排序的查询:-
table_name.objects.filter(id=id,created_time__isnull=False,day__range=[(date.today()-timedelta(days=30)),date.today()]).annotate(hour=ExtractHour('created_time'),num_time = Sum('A') + Sum('B') + Sum('C') + Sum('D')).values('hour', 'num_time').order_by('hour')
任何帮助将不胜感激!
答案 0 :(得分:0)
将查询结尾更改为仅按hour
分组,而不按num_time
分组并再次注释:
table_name.objects\
.filter(
id=id
created_time__isnull=False,
day__range=[(date.today()-timedelta(days=30)),date.today()])\
.annotate(
hour=ExtractHour('created_time'),
num_time = Sum('A') + Sum('B') + Sum('C') + Sum('D'))\
.values('hour')\
.annotate(total_time = Sum('num_time'))\
.order_by('hour')