【问题标题】:Get all results that contain the largest value in table获取包含表中最大值的所有结果
【发布时间】:2025-11-20 14:25:01
【问题描述】:

假设我有一个名为 test 的非常简单的表:

ID        AGE         NAME
1         12          Bob
1         13          Bob
2         13          John
3         9           Michael
3         11          Michael

我想返回表中AGE 最大的所有结果。因此,对于这种情况,结果将是年龄为 13 岁的实体:

ID        AGE         NAME
1         13          Bob
2         13          John

我认为应该存在这样的东西,我的思考过程如下(即使我知道语法行不通):

connection.getSqlQuery()
                .from(test)
                .max(test.age)
                .list(test.id, test.age, test.name);

对此的正确查询是什么?

【问题讨论】:

  • 按年龄和 ID/姓名分组,以及年龄 = (select max(age).... )

标签: java postgresql querydsl


【解决方案1】:

您可以创建一个子查询并在 where 子句中使用它:

// Aggregate to get the maximum age
var subQuery = connection.getSqlQuery()
    .select(test.age.max())
    .from(test);

connection.getSqlQuery()
    .from(test)
    .where(test.age.eq(subQuery))
    .list(test.id, test.age, test.name);

如果你使用JPA,你也可以使用var subQuery = JPAExpressions.select(...

【讨论】:

    最近更新 更多