diff --git a/planner/core/logical_plan_builder.go b/planner/core/logical_plan_builder.go index 63063581bfb8c..cc7f7d75e5907 100644 --- a/planner/core/logical_plan_builder.go +++ b/planner/core/logical_plan_builder.go @@ -1436,7 +1436,6 @@ type havingWindowAndOrderbyExprResolver struct { inWindowFunc bool inWindowSpec bool inExpr bool - orderBy bool err error p LogicalPlan selectFields []*ast.SelectField @@ -1528,10 +1527,10 @@ func (a *havingWindowAndOrderbyExprResolver) Leave(n ast.Node) (node ast.Node, o a.inWindowSpec = false case *ast.ColumnNameExpr: resolveFieldsFirst := true - if a.inAggFunc || a.inWindowFunc || a.inWindowSpec || (a.orderBy && a.inExpr) || a.curClause == fieldList { + if a.inAggFunc || a.inWindowFunc || a.inWindowSpec || (a.curClause == orderByClause && a.inExpr) || a.curClause == fieldList { resolveFieldsFirst = false } - if !a.inAggFunc && !a.orderBy { + if !a.inAggFunc && a.curClause != orderByClause { for _, item := range a.gbyItems { if col, ok := item.Expr.(*ast.ColumnNameExpr); ok && (colMatch(v.Name, col.Name) || colMatch(col.Name, v.Name)) { @@ -1551,7 +1550,7 @@ func (a *havingWindowAndOrderbyExprResolver) Leave(n ast.Node) (node ast.Node, o return node, false } if index == -1 { - if a.orderBy { + if a.curClause == orderByClause || a.curClause == havingClause { index, a.err = a.resolveFromPlan(v, a.p) } else { index, a.err = resolveFromSelectFields(v, a.selectFields, true) @@ -1624,7 +1623,6 @@ func (b *PlanBuilder) resolveHavingAndOrderBy(sel *ast.SelectStmt, p LogicalPlan } havingAggMapper := extractor.aggMapper extractor.aggMapper = make(map[*ast.AggregateFuncExpr]int) - extractor.orderBy = true extractor.inExpr = false // Extract agg funcs from order by clause. if sel.OrderBy != nil {