From c2a87a0c884f6be6e87e11aff979ddae48ea9272 Mon Sep 17 00:00:00 2001 From: Robin Bygrave Date: Mon, 15 Mar 2021 22:43:25 +1300 Subject: [PATCH] #2196 - SQLException:Column "T0.ID" must be in the GROUP BY list - when findCount with having clause --- .../server/query/SqlTreeBuilder.java | 2 +- .../query/aggregation/TestAggregationCount.java | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/query/SqlTreeBuilder.java b/ebean-core/src/main/java/io/ebeaninternal/server/query/SqlTreeBuilder.java index 065884b54..239e8a58e 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/query/SqlTreeBuilder.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/query/SqlTreeBuilder.java @@ -151,7 +151,7 @@ public final class SqlTreeBuilder { } private String buildGroupByClause() { - if (rawSql || !rootNode.isAggregation()) { + if (rawSql || (!rootNode.isAggregation() && query.getHavingExpressions() == null)) { return null; } ctx.startGroupBy(); diff --git a/ebean-core/src/test/java/org/tests/query/aggregation/TestAggregationCount.java b/ebean-core/src/test/java/org/tests/query/aggregation/TestAggregationCount.java index a91aef120..261202696 100644 --- a/ebean-core/src/test/java/org/tests/query/aggregation/TestAggregationCount.java +++ b/ebean-core/src/test/java/org/tests/query/aggregation/TestAggregationCount.java @@ -3,6 +3,7 @@ package org.tests.query.aggregation; import io.ebean.BaseTestCase; import io.ebean.Ebean; import io.ebean.Query; +import io.ebeantest.LoggedSql; import org.ebeantest.LoggedSqlCollector; import org.junit.BeforeClass; import org.junit.Test; @@ -91,6 +92,22 @@ public class TestAggregationCount extends BaseTestCase { } } + @Test + public void findCount_withHaving() { + Query query = Ebean.find(TEventOne.class) + //.select("id, totalUnits") + .having() + .ge("totalUnits", 1) + .query(); + + LoggedSql.start(); + int count = query.findCount(); + List sql = LoggedSql.stop(); + assertThat(sql).hasSize(1); + assertThat(sql.get(0)).contains("group by t0.id"); + assertThat(count).isGreaterThan(0); + } + @Test public void testFull() {