postgresql - QueryDSL GroupBy 和 Sum

标签 postgresql querydsl

我有这些 QueryDSL 语句:

BooleanExpression alwaysTrueExpression = match(null, null, datePeriod, period);

if (minAmount != null) {
    alwaysTrueExpression = alwaysTrueExpression.and(aggregatedOrder.totalUnitAmountWithoutTax.sum().goe(minAmount));
}
if (maxAmount != null) {
    alwaysTrueExpression = alwaysTrueExpression.and(aggregatedOrder.totalUnitAmountWithoutTax.sum().loe(maxAmount));
}

JPAQuery<AggregatedOrder> query = selectFrom(aggregatedOrder);
query = query.where(alwaysTrueExpression);
log.debug("sql={}", query);

return query.transform(GroupBy.groupBy(aggregatedOrder.tradingPromoterBranch.promoter).as(GroupBy.sum(aggregatedOrder.totalUnitAmountWithoutTax)));

但它抛出错误:

Caused by: org.postgresql.util.PSQLException: ERROR: aggregate functions are not allowed in WHERE

我想按发起人对 aggregatedOrder 进行分组并使用金额进行过滤。

最佳答案

我认为您混合了 Querydsl 支持的两种类型的分组:

  • query.transform(...):一旦从数据库中获取数据,组就会在内存中产生结果。在这种情况下,查询不包含“group by”子句,数据转换在“java 端”执行。
  • query.groupBy(...):将 group by 子句添加到您的查询中。在这种情况下,分组由数据库执行。

如果您在查询中需要聚合函数,则需要使用“query.groupBy(...)”提供“分组依据”列。

关于postgresql - QueryDSL GroupBy 和 Sum,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53444233/

相关文章:

postgresql - 新用户在公共(public)架构上的默认权限?

mysql - 排序和分页

QueryDsl 生成 native 查询

elasticsearch - Elasticsearch 中的“出生日期”字段的部分日期搜索

java - hibernate 搜索中的通配符查询

php - 为 PostgreSQL 中的 WHERE IN 子句绑定(bind)多行和多列

python - 是否可以重命名 SQLAlchemy 声明性基础的元数据属性?

c++ - 如何使用 Libpqxx 访问存储在 Postgres 中的多边形点?

ruby-on-rails - 尝试通过 accepts_nested_attributes_for 查找或创建?