簡體   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