我正在尝试从我的 django 模型表中提取一些分析。到目前为止,我可以计算字段的总值和字段的不同值。我还知道如何创建显示不同字段内字段总值的列表。现在我想计算一个字段出现在不同字段的已经不同值的列表中的不同实例。这是我正在使用的表:| uid | cid ||-------|--------|| a | apple || a | apple || a | grape || b | apple || b | grape || c | apple || c | pear || c | pear || c | pear |所以我试图提供的结果是:cid: apple (distinct uid count: 3),cid: grape (distinct uid count: 2),cid: pear (distinct uid count: 1)并且:cid apple's distinct uid's: a, b, ccid grape's distinct uid's: a, bcid pear's distinct uid's: c到目前为止,我已经能够获得不同的计数和列表,如下所示:dist_uid_list = Fruit.objects.filter(client=user).values('uid').distinct()output >>> {'uid': 'a', 'uid': 'b', 'uid': 'c'}和这个:dist_uid_count = Fruit.objects.filter(client=user).values('uid').distinct().count()output >>> {3}以及更复杂的:total_actions_per_cid = Fruit.objects\ .filter(client=user)\ .values('cid').distinct()\ .annotate(num_actions=Count('action_name'))\ .order_by('cid')output >>> {'cid': 'apple', 'num_actions': '4'}{'cid': 'grape', 'num_actions': '2'}{'cid': 'pear', 'num_actions': '3'}所以问题是:我怎样才能进入并获取每个不同的“cid”并找到每个不同的“uid”中存在多少个不同的“uid”?
1 回答
翻阅古今
TA贡献1780条经验 获得超5个赞
计数聚合有一个不同的参数,可能会有所帮助:
>>> q = Book.objects.annotate(Count('authors', distinct=True), Count('store', distinct=True))
https://docs.djangoproject.com/en/3.1/topics/db/aggregation/#combining-multiple-aggregations
因此您的查询将如下所示:
# I removed the distinct after .values, as the values works
# like a GROUP BY, thus you will get already unique 'cid's
total_actions_per_cid = Fruit.objects\
.filter(client=user)\
.values('cid') \
.annotate(num_uids=Count('uid', distinct=True))
添加回答
举报
0/150
提交
取消