【问题标题】:Django queries when Joining the same table on itselfDjango在自己加入同一个表时查询
【发布时间】:2023-03-18 14:23:01
【问题描述】:

我发现在我的工作中,我经常不得不自己加入同一张表,部分原因是我无法控制数据库设计,部分原因是大部分时间都希望事情非常定制。

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__pk=100).values("label").annotate(dupCount=models.Count("label")).order_by("dupCount")这是使用a special type of annotations
  • 问题在于我正在尝试查找不同标签的数量。 IE。标签可以是 A |乙| C,我需要A的计数,B的计数和C的计数
  • @TimmyO'Mahony 它确实有效。好电话!
  • 我会添加它作为答案

标签: django orm self-join


【解决方案1】:

您应该能够通过混合使用 annotatevalues 来实现此目的

OptEvents \
    .objects \
    .filter(campaign__pk=100) \
    .values("label") \
    .annotate(dupCount=mod‌​els.Count("label")) \
    .order_by("dupCount")

Here's a good blog post on this by Daniel Roseman

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-26
    • 1970-01-01
    • 2020-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多