我有这些 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
我想按发起人的聚合顺序分组并使用金额进行过滤。
这是我聚合列并按总和过滤的方法:
BooleanExpression alwaysTrueExpression = Expressions.asBoolean(true).isTrue();
NumberExpression<BigDecimal> totalUnitAmountWithoutTax = aggregatedOrder.totalUnitAmountWithoutTax.sum();
NumberExpression<Integer> totalQuantity = aggregatedOrder.quantity.sum();
NumberPath<Long> qPromoter = aggregatedOrder.tradingPromoterBranch.promoter.id;
BooleanExpression amountExpression = Expressions.asBoolean(true).isTrue();
if (minAmount != null) {
amountExpression = amountExpression.and(totalUnitAmountWithoutTax.goe(minAmount));
}
if (maxAmount != null) {
amountExpression = amountExpression.and(totalUnitAmountWithoutTax.loe(maxAmount));
}
JPAQuery<Tuple> query = jpaQueryFactory.select(qPromoter, totalUnitAmountWithoutTax, totalQuantity).from(aggregatedOrder).groupBy(qPromoter);
query = query.where(alwaysTrueExpression).having(amountExpression);
return query.fetch();
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句