diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/SingleNodePlanner.java b/fe/fe-core/src/main/java/org/apache/doris/planner/SingleNodePlanner.java index 3f936cb46b88a9..802898d14338d1 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/planner/SingleNodePlanner.java +++ b/fe/fe-core/src/main/java/org/apache/doris/planner/SingleNodePlanner.java @@ -2034,6 +2034,11 @@ private List getPredicatesBoundedByGroupbysSourceExpr(List predicate Expr sourceExpr = slotDesc.getSourceExprs().get(0); // if grouping set is given and column is not in all grouping set list // we cannot push the predicate since the column value can be null + if (stmt.getGroupByClause() == null) { + //group by clause may be null when distinct grouping. + //eg: select distinct c from ( select distinct c from table) t where c > 1; + continue; + } if (stmt.getGroupByClause().isGroupByExtension() && stmt.getGroupByClause().getGroupingExprs().contains(sourceExpr)) { // if grouping type is CUBE or ROLLUP will definitely produce null diff --git a/fe/fe-core/src/test/java/org/apache/doris/planner/QueryPlanTest.java b/fe/fe-core/src/test/java/org/apache/doris/planner/QueryPlanTest.java index 433671ee3b45cb..974484b6481804 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/planner/QueryPlanTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/planner/QueryPlanTest.java @@ -850,6 +850,14 @@ public void testJoinPredicateTransitivityWithSubqueryInWhereClause() throws Exce Assert.assertTrue(!explainString.contains("PREDICATES")); } + @Test + public void testDistinctPushDown() throws Exception { + connectContext.setDatabase("default_cluster:test"); + String sql = "select distinct k1 from (select distinct k1 from test.pushdown_test) t where k1 > 1"; + String explainString = UtFrameUtils.getSQLPlanOrErrorMsg(connectContext, "explain " + sql); + Assert.assertTrue(explainString.contains("PLAN FRAGMENT")); + } + @Test public void testConstInParitionPrune() throws Exception { FeConstants.runningUnitTest = true;