繁体   English   中英

Django 聚合和注释以按组计数 - 多级

[英]Django aggregate and annotate to count by group - multiple levels

我有一个 model 看起来像:

class Foo(models.Model):
    bar = models.CharField(...)
    baz = models.CharField(...)

Foo(bar="a", baz="x")
Foo(bar="a", baz="x")
Foo(bar="a", baz="y")
Foo(bar="b", baz="y")

我想要一个查询集,它将为每个bar返回最大数量的唯一(bar, baz)对:

[
    {"bar": "a", "baz": "x", "count": 2},
    {"bar": "b", "baz": "y", "count": 1},
]

理想情况下,这一切都将在查询中完成,我尝试了distinctaggregateannotate的组合,但无济于事,除了运行我想避免的原始 SQL 之外,看不到如何做。

我使用 PostgreSQL 作为我的数据库后端。

Django 的数据库抽象 API 非常强大,而且我经常发现即使是最复杂的查询也可以获得必要的结果。 一开始可能会让人感到困惑,但如果使用得当,您可以通过注释获得很多好处。

https://docs.djangoproject.com/en/4.0/topics/db/aggregation/#values

我能够使用 Django valuesannotateCount来实现结果:

from django.db.models import Count
from .models import Foo

Foo.objects.all().values('bar','baz').annotate(count=Count('id')).order_by('-count')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM