猿问

计算同一 jango 模型中另一个字段的不同值搜索中的不同值

我正在尝试从我的 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, c

cid grape's distinct uid's: a, b

cid 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”?


Cats萌萌
浏览 109回答 1
1回答

翻阅古今

计数聚合有一个不同的参数,可能会有所帮助:>>> 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'stotal_actions_per_cid = Fruit.objects\            .filter(client=user)\            .values('cid') \            .annotate(num_uids=Count('uid', distinct=True))
随时随地看视频慕课网APP

相关分类

Python
我要回答