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

如何使用Django ORM筛选出指定字段为最大值的记录

实现方案

你可以通过Django ORM的聚合查询能力实现需求,无需提前知晓number的最大值,以下是两种常用写法:

写法1:分两步查询(可读性高)

先通过Max聚合函数拿到number字段的最大值,再用该值作为过滤条件查询用户,会执行2次数据库请求:

from django.db.models import Max

# 第一步:获取number的最大值
max_num = User.objects.aggregate(max_number=Max('number'))['max_number']
# 第二步:查询所有number等于最大值的用户
max_users = User.objects.filter(number=max_num)

该写法逻辑简单易懂,适合绝大多数业务场景,能正确返回示例中的Jack、Carla两个符合条件的用户。

写法2:子查询(仅1次数据库请求)

如果需要优化数据库请求次数,可以将最大值查询封装为子查询,仅执行1次数据库请求就能拿到结果:

from django.db.models import Subquery

# 子查询先拿到最大的number值,外层直接用该值过滤
max_users = User.objects.filter(
    number=Subquery(
        User.objects.order_by('-number').values('number')[:1]
    )
)

该写法适合对接口性能要求较高的场景,返回结果和写法1完全一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 20:27:05