Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
django queryset上的groupby操作_Django_Group By_Django Queryset - Fatal编程技术网

django queryset上的groupby操作

django queryset上的groupby操作,django,group-by,django-queryset,Django,Group By,Django Queryset,我有这样一个db表: 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\u col1':5,'type\u id\u name':balh,'col2':b},{'id':2

我有这样一个db表:

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\u col1':5,'type\u id\u name':balh,'col2':b},{'id':2,'count\u col1':3,'type\u id\u name':balab,'col2':a}]


我怎么做?这可以由pandas中的groupby完成,但我不知道如何在这里完成。

看起来您的目标是计算每个
id
col1
s之和。我们可以通过以下方式做到这一点:

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')
或者如果要包括
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')
从django.db.models导入F,求和
Model.objects.values('type_id','col2')。注释(
type\u name=F('type\u name'),
count\u col1=总和('col1')

).order\u by('type\u id','col2')
这里的型号是什么?Django不处理表,它处理模型。通常最好不要用表来定义查询,而是用这些模型来定义查询。这当然是一个模型,它有id,col1,col2,col3@WillemVanOnsemI我不太明白为什么id在这里出现多次。通常id是主键?已编辑,您收到了吗@WillemVanOnsemI将来也会建议提供模型的(相关部分)。模型与表之间没有1对1的关系。多个模型可以映射到同一个表。它解决了我的问题,但在col2中,所有类型的_id=1的值都是b,所有类型的_id=2的值都是a。如何将其添加到查询集中@WillemVanOnsem@MHB:您可以将其包含在
.values(..)
.order\u by(..)
中。如果存在函数依赖关系,那么它只会对
类型\u id
进行一次rop。也就是说,如果存在函数依赖关系,您可能可以通过将数据库移动到
type\u id
引用的表来优化数据库。
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')