首页 > 解决方案 > Django 聚合问题 - 奇怪的行为

问题描述

我有一个查询活动集,在该模型上有一个关联的 user_id。在此示例中,我有一个基于此语句的查询集,其中包含以下内容

activities.values('user_id').annotate(Min('duration'))

[
    {'user_id': 149026, 'duration__min': Decimal('480.0000')}, 
    {'user_id': 149026, 'duration__min': Decimal('454.0000')}, 
    {'user_id': 149026, 'duration__min': Decimal('360.0000')}, 
    {'user_id': 149027, 'duration__min': Decimal('420.0000')}
]

我需要为每个持续时间最短的 user_id 获取活动。我有点困惑为什么下面的以下陈述会返回给我我想要的东西

activities.values('user_id').annotate(Min('duration')).order_by('user_id')

[
    {'user_id': 149026, 'duration__min': Decimal('360.0000')}, 
    {'user_id': 149027, 'duration__min': Decimal('420.0000')}
]

为什么 order_by("user_id") 子句会返回特定用户的最低持续时间活动。另外,annotate 之前的 value 子句不应该导致返回的查询为每个唯一的 user_id 有一个带注释的结果吗?

标签: pythondjangoannotationsaggregate

解决方案


推荐阅读