【问题标题】:Aggregate function calls cannot be nested聚合函数调用不能嵌套
【发布时间】:2013-09-14 09:46:22
【问题描述】:

我正在咨询http://www.querydsl.com/static/querydsl/3.2.1/reference/pdf/Querydsl_Reference.pdf的文档

我看到了例子

QDepartment department = QDepartment.department;
QDepartment d = new QDepartment("d");
query.from(department)
 .where(department.employees.size().eq(
      new JPASubQuery().from(d).unique(d.employees.size().max())
 )).list(department);

我尝试使用以下代码使用我的表执行查询:

QAdminEntity tableAdmin = QAdminEntity.adminEntity;
JPAQuery query = queryFrom( tableAdmin ).where(
    tableAdmin.id_city.eq( idCity ).and(
        tableAdmin.problems.size().eq(
            subQueryFrom( tableAdmin ).unique(
                tableAdmin.problems.size().min()
            )
        )
    )
);

return query.singleResult( tableAdmin );

该代码给了我一个错误,例如“不能嵌套聚合函数调用”。

我很抱歉我在 postgres 和 querydsl 方面缺乏专业知识,但我想这应该非常简单。

结果查询:

select
    adminentit0_.id_admin as id1_3_,
    adminentit0_.ds_email as ds2_3_,
    adminentit0_.ds_name as ds3_3_,
    adminentit0_.ds_password as ds4_3_,
    adminentit0_.ds_username as ds5_3_,
    adminentit0_.id_city as id6_3_,
    adminentit0_.id_permission as id7_3_ 
from
    m_admin adminentit0_ 
where
    adminentit0_.id_city=? 
    and (
        select
            count(problems1_.id_admin) 
        from
            m_problem problems1_ 
        where
            adminentit0_.id_admin=problems1_.id_admin
    )=(
        select
            min(count(problems3_.id_admin)) 
        from
            m_admin adminentit2_,
            m_problem problems3_ 
        where
            adminentit2_.id_admin=problems3_.id_admin
        ) limit ?

如您所见,我想从关系管理员 -> 问题中列出问题比其他人少的管理员。

我怎样才能做到这一点?

附加问题:
是否有必要为 subQuery 获取另一个“QAdminEntity”字段,或者“new QDepartment(“d”)”代码中的“d”变量仅用于示例?

【问题讨论】:

    标签: querydsl


    【解决方案1】:

    以下查询应该具有相似的语义

    QAdminEntity adminEntity = QAdminEntity.adminEntity;
    JPAQuery query = query.from(adminEntity)
        .where(adminEntity.id_city.eq(idCity))
        .orderBy(adminEntity.problems.size().asc())
        .limit(1);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-22
      • 1970-01-01
      相关资源
      最近更新 更多