Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 获取表中的顶级重复结果(仅使用1个查询)_Python_Django - Fatal编程技术网

Python 获取表中的顶级重复结果(仅使用1个查询)

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查询中找到如何执行此操作。我可以通过按年龄排序,然后找到具有该最

假设我有一个模型:

类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查询中找到如何执行此操作。我可以通过按年龄排序,然后找到具有该最高年龄的精确匹配项来完成此操作,但这需要两个查询。

使用:


但是它的两个查询合并为一个

,因此为了清楚起见,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)