对Django queryset的groupby操作

时间:2019-09-29 08:05:23

标签: django group-by django-queryset

我有一个这样的数据库表:

id|type_id | col1 | col2 | col3
0 |     1  |   2  |  b   |   c
1 |     2  |   1  |  a   |   a
2 |     2  |   2  |  a   |   c
3 |     1  |   3  |  b   |   c

我需要编写一个查询集以具有:

[{'id':1, 'count_col1': 5, 'type_id__name':balh, 'col2':b},{'id':2, 'count_col1':3, 'type_id__name': balab, 'col2':a}]

我该怎么做?可以通过groupby在熊猫中完成,但是我不知道如何在这里完成。

1 个答案:

答案 0 :(得分:1)

您似乎希望为每个col1计算id的总和。我们可以这样:

from django.db.models import F, Sum

Model.objects.values('type_id').annotate(
    type_name=F('type__name'),
    count_col1=Sum('col1')
).order_by('type_id')

这将构建QuerySet的字典,其外观如下:

<QuerySet [
    {'type_id': 1, 'type_name': 'foo', 'count_col1': 5},
    {'type_id': 2, 'type_name': 'bar', 'count_col1': 3}
]>

,或者如果要包含col2

from django.db.models import F, Sum

Model.objects.values('type_id', 'col2').annotate(
    type_name=F('type__name'),
    count_col1=Sum('col1')
).order_by('type_id', 'col2')