簡體   English   中英

Django - 選擇相關查詢集字段的MAX

[英]Django - Select MAX of field of related query set

說我是否有模型:

class User(models.Model):
    name = ...
    dob = ...

class Event(models.Model):
    user = models.ForeignKey(User, ...)
    timestamp = models.DateTimeField()

我想查詢所有用戶並使用事件計數和 Events.timestamp 的 MAX 進行注釋

我知道我可以做到:

Users.objects.all().annotate(event_count=models.Count('event_set'))

但是我如何做相關查詢集字段的最大值? 我希望它是一個單一的查詢,例如:

SELECT Users.*, MAX(Events.timestamp), COUNT(Events) FROM Users JOIN Events on Users.id = Events.user_id

您可以使用查詢表達式來實現這一點。 根據您的代碼,您可能必須使用與外鍵相關的名稱,但這會導致如下所示:

from django.db.models import Count, F, Func,

Users.objects.all().annotate(
    event_count=Count('event_set'), 
    max_timestamp=Func(F('event_set__timestamp'), function='MAX')
)

您可以嘗試為此進行聚合查詢,如下所示:

from django.db.models import Max

Users.objects.all().aggregate(Max('Events.timestamp'))

請在此處查看Django 文檔中上述代碼的詳細信息

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM