gpt4 book ai didi

python - Django 查询集 : additional field for counting value's occurence

转载 作者:太空宇宙 更新时间:2023-11-03 15:44:00 25 4
gpt4 key购买 nike

我有一个包含 100 个项目的 QuerySet 对象,对于每个项目,我需要知道特定 contract_numbercontract_number 中出现了多少次> 字段。

预期输出示例:

[{'contract_number': 123, 'contract_count': 2}, {'contract_number': 456, 'contract_count': 1} ...]

这意味着值 123 在整个 contract_number 字段中出现了 2 次。

重要的是:我不能减少项目的数量,所以分组在这里不起作用。

与此等效的 SQL 将是一个附加字段 contract_count,如下所示:

 SELECT *,
(SELECT count(contract_number) FROM table where t.contract_number = contract_number) as contract_count
FROM table as t

问题是如何使用 Python 对象来完成它。经过一些研究,我发现对于更复杂的查询,应该使用 Queryset extra method。下面是我的一个尝试,但结果不是我所期望的

    queryset = Tracker.objects.extra(
select={
'contract_count': '''
SELECT COUNT(*)
FROM table
WHERE contract_number = %s
'''
},select_params=(F('contract_number'),),)

我的models.py:

class Tracker(models.Model):
contract_number = models.IntegerField()

编辑:我的问题的解决方案是 Subquery()

最佳答案

你可以像这样使用注解:

from django.db.models import Count
Tracker.objects.values('contract_number').annotate(contract_count=Count('contract_number')).order_by()

关于python - Django 查询集 : additional field for counting value's occurence,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51150898/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com