code: func fillGroupStats(g *memo.Group) (err error) {
  	if g.Prop.Stats != nil {
  		return nil
  	}
  	// All GroupExpr in a Group should share same LogicalProperty, so just use
  	// first one to compute Stats property.
  	elem := g.Equivalents.Front()
  	expr := elem.Value.(*memo.GroupExpr)
  	childStats := make([]*property.StatsInfo, len(expr.Children))
  	for i, childGroup := range expr.Children {
  		err = fillGroupStats(childGroup)
  		if err != nil {
  			return err
  		}
  		childStats[i] = childGroup.Prop.Stats
  	}
  	planNode := expr.ExprNode
  	g.Prop.Stats, err = planNode.DeriveStats(childStats)
  	return err
  }
docs: // fillGroupStats computes Stats property for each Group recursively.