code: func (er *expressionRewriter) handleOtherComparableSubq(lexpr, rexpr expression.Expression, np LogicalPlan, useMin bool, cmpFunc string, all bool) {
  	plan4Agg := LogicalAggregation{}.Init(er.ctx)
  	plan4Agg.SetChildren(np)
  
  	// Create a "max" or "min" aggregation.
  	funcName := ast.AggFuncMax
  	if useMin {
  		funcName = ast.AggFuncMin
  	}
  	funcMaxOrMin := aggregation.NewAggFuncDesc(er.ctx, funcName, []expression.Expression{rexpr}, false)
  
  	// Create a column and append it to the schema of that aggregation.
  	colMaxOrMin := &expression.Column{
  		ColName:  model.NewCIStr("agg_Col_0"),
  		UniqueID: er.ctx.GetSessionVars().AllocPlanColumnID(),
  		RetType:  funcMaxOrMin.RetTp,
  	}
  	schema := expression.NewSchema(colMaxOrMin)
  
  	plan4Agg.SetSchema(schema)
  	plan4Agg.AggFuncs = []*aggregation.AggFuncDesc{funcMaxOrMin}
  
  	cond := expression.NewFunctionInternal(er.ctx, cmpFunc, types.NewFieldType(mysql.TypeTiny), lexpr, colMaxOrMin)
  	er.buildQuantifierPlan(plan4Agg, cond, lexpr, 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).