Python 获取表中的顶级重复结果(仅使用1个查询)
假设我有一个模型: 类Peoplemodels。模型: 名称=型号。CharFieldmax_长度=200 年龄=型号。正整数字段 这是它的当前数据:Python 获取表中的顶级重复结果(仅使用1个查询),python,django,Python,Django,假设我有一个模型: 类Peoplemodels。模型: 名称=型号。CharFieldmax_长度=200 年龄=型号。正整数字段 这是它的当前数据: name age Bob 18 Carly 20 Steve 20 John 20 Ted 19 Judy 17 我如何获得最上面的副本?因此: name age Carly 20 Steve 20 John 20 我无法在一个django查询中找到如何执行此操作。我可以通过按年龄排序,然后找到具有该最
name age
Bob 18
Carly 20
Steve 20
John 20
Ted 19
Judy 17
我如何获得最上面的副本?因此:
name age
Carly 20
Steve 20
John 20
我无法在一个django查询中找到如何执行此操作。我可以通过按年龄排序,然后找到具有该最高年龄的精确匹配项来完成此操作,但这需要两个查询。使用:
或
但是它的两个查询合并为一个,因此为了清楚起见,sql查询应该是:SELECT*FROM people WHERE age=SELECT MAXAGE FROM people?一两年后,每个人的年龄都会完全相同?这只是一个简单的例子。所以…把它们想象成永不老化,这在现实生活中会很好…从文档来看,这看起来只在SQL中起作用。有没有一种通用的方法可以符合支持的引擎?我想不出一种通过ORM避免两个查询的方法,尽管这没有什么错either@justderb,我确认编辑前的答案代码仅在SQLite3中有效。很抱歉我更新了答案。在SQLite3、Postgresql中测试。@justderb,不使用SQL。。。。从django.db.models导入Max;people=people.objects.filterage=User.objects.aggregatem=Max'age'['m']。这涉及两个查询,尽管这比对整行进行排序要好。现在,这是我唯一想到的。或者说是最近的“年龄”。年龄
people = People.objects.extra(where=['age=(select max(age) from app_people)'])
people = People.objects.extra(where=['age=(select max(age) from {})'.format(
People._meta.db_table
)])
People.objects.filter(age=People.objects.order_by('-age')[0].age)