【发布时间】:2018-12-11 13:13:08
【问题描述】:
我有一个包含 100 个项目的 QuerySet 对象,对于每个项目,我需要知道特定 contract_number 在 contract_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()
【问题讨论】:
标签: python sql django django-queryset extra