code: func (er *expressionRewriter) handleOtherComparableSubq(lexpr, rexpr expression.Expression, np LogicalPlan, useMin bool, cmpFunc string, all bool) {
  	funcName := ast.AggFuncMax
  	if useMin {
  		funcName = ast.AggFuncMin
  	}
  	aggFunc := expression.NewAggFunction(funcName, []expression.Expression{rexpr}, false)
  	agg := &Aggregation{
  		baseLogicalPlan: newBaseLogicalPlan(Agg, er.b.allocator),
  		AggFuncs:        []expression.AggregationFunction{aggFunc},
  	}
  	agg.initIDAndContext(er.b.ctx)
  	agg.self = agg
  	addChild(agg, np)
  	aggCol0 := &expression.Column{
  		ColName:  model.NewCIStr("agg_Col_0"),
  		FromID:   agg.id,
  		Position: 0,
  		RetType:  aggFunc.GetType(),
  	}
  	schema := expression.NewSchema([]*expression.Column{aggCol0})
  	agg.SetSchema(schema)
  	cond, _ := expression.NewFunction(er.ctx, cmpFunc, types.NewFieldType(mysql.TypeTiny), lexpr, aggCol0.Clone())
  	er.buildQuantifierPlan(agg, cond, rexpr, all)
  }
docs: // handleOtherComparableSubq handles the queries like < any, < max, etc. For example, if the query is t.id < any (select s.id from s),
  // it will be rewrote to t.id < (select max(s.id) from s).