Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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在自身上加入同一个表时进行查询_Django_Orm_Self Join - Fatal编程技术网

Django在自身上加入同一个表时进行查询

Django在自身上加入同一个表时进行查询,django,orm,self-join,Django,Orm,Self Join,我发现在我的工作中,我经常不得不自己加入同一个表,部分原因是我无法控制数据库的设计,部分原因是大多数时候都需要定制一些东西 Select distinct t.label, z.dupCount From optevents t Join (select label, Count(*) dupCount from optevents group By label Having Count(*) > 1

我发现在我的工作中,我经常不得不自己加入同一个表,部分原因是我无法控制数据库的设计,部分原因是大多数时候都需要定制一些东西

Select distinct t.label, z.dupCount
    From optevents t
    Join
      (select label, Count(*) dupCount
          from optevents 
          group By label
          Having Count(*) > 1) z
    On z.label = t.label
    where t.campaignId = 100
    order By dupCount Desc
我很好奇如何将其转换为Django ORM查找


模型定义非常简单,根本没有外键。

您应该能够通过和的组合实现这一点


这是未经测试的,所以我暂时将其作为注释:
OptEvents.objects.filter(campaign\uu pk=100.values(“label”).annotate(dupCount=models.Count(“label”).order\u by(“dupCount”)
这是一个使用问题,我试图找到不同标签的计数。也就是说,标签可以是A | B | C,我需要A的计数、B的计数和C@TimmyO“Mahony,它确实管用。好球!我会加上它作为答案
OptEvents \
    .objects \
    .filter(campaign__pk=100) \
    .values("label") \
    .annotate(dupCount=mod‌​els.Count("label")) \
    .order_by("dupCount")