You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django中按Houseid分组获取Vehid最大计数的查询问题

搞定Django查询里Count和Max的整合问题

嘿,我看你已经写出了按houseid和vehid分组统计次数的查询,但想把Max函数整合进去对吧?得先明确你要的具体结果——是每个houseid下某个字段的最大值,还是每个houseid里vehid计数的最大值?下面分两种最常见的场景给你方案:

场景1:同时统计vehid次数+每个houseid对应字段的最大值

比如你想拿到每个houseid+vehid组合的出现次数,同时获取该houseid下某个字段(比如update_time)的最大值,直接把Max加到annotate里就行:

from django.db.models import Count, Max

# 把「目标字段名」替换成你要取最大值的字段
queryset = ModelClassName.objects.values('houseid', 'vehid')
                      .annotate(veh_count=Count('vehid'), max_target=Max('目标字段名'))
                      .order_by('houseid')

这里因为values先指定了houseid,Max会自动按houseid分组计算最大值,同时veh_count是按houseid+vehid分组的计数,两者可以完美共存。

场景2:获取每个houseid下vehid的最大出现次数

如果你想得到每个houseid里,出现次数最多的vehid对应的计数,就得先做子查询统计每个组合的次数,再外层按houseid取最大值:

from django.db.models import Count, Max, Subquery, OuterRef

# 第一步:子查询,先算出每个houseid+vehid的出现次数
count_subquery = ModelClassName.objects.values('houseid', 'vehid')
                                 .annotate(veh_count=Count('vehid'))
                                 .filter(houseid=OuterRef('houseid'))

# 第二步:外层按houseid分组,取该组内最大的veh_count
result = ModelClassName.objects.values('houseid')
                               .annotate(max_veh_count=Max(Subquery(count_subquery.values('veh_count')[:1])))
                               .order_by('houseid')

这样返回的结果里,每个houseid对应的max_veh_count就是这个houseid下vehid出现次数的峰值。

如果你的需求是其他情况(比如每个vehid对应的最大houseid?),可以补充更多细节,我再帮你调整~

内容的提问来源于stack exchange,提问作者shelholmes221

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 08:23:30