問題

我有這樣的資料庫表:

 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}]

我該怎麼做?它可以由pandas中的groupby完成,但我不知道如何在這裡做到這一點.

  最佳答案

看起來你的目標是為每個id計算col1的總和.我們可以這樣做:

 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') 

  相同標籤的其他問題

djangogroup-bydjango-queryset