diff --git a/src/query/sql/src/planner/binder/sort.rs b/src/query/sql/src/planner/binder/sort.rs index 282b47670edef..b8cf2c3872287 100644 --- a/src/query/sql/src/planner/binder/sort.rs +++ b/src/query/sql/src/planner/binder/sort.rs @@ -156,11 +156,17 @@ impl Binder { )) .set_span(order.expr.span())); } + order_items.push(OrderItem { expr: order.clone(), name: projections[index].column_name.clone(), index: projections[index].index, - need_eval_scalar: false, + need_eval_scalar: scalar_items.get(&projections[index].index).map_or( + false, + |scalar_item| { + !matches!(&scalar_item.scalar, ScalarExpr::BoundColumnRef(_)) + }, + ), }); } _ => { diff --git a/tests/sqllogictests/suites/query/order.test b/tests/sqllogictests/suites/query/order.test index 214b046d8dfad..aeb686603bbfc 100644 --- a/tests/sqllogictests/suites/query/order.test +++ b/tests/sqllogictests/suites/query/order.test @@ -28,6 +28,15 @@ NULL 1 2 +query II +select number d , max(1-number) c from numbers(4) group by 1 order by 2; +---- +3 -2 +2 -1 +1 0 +0 1 + + statement ok drop table order_test @@ -36,4 +45,3 @@ select number from numbers(10) as a order by b.number statement error select number from (select * from numbers(10) as b) as a order by b.number -