private void initGroupedInputExpressions() {
    this.groupedInputExpressions = new ArrayList<>();
    for (int i = 0; i < inputExpressions.size(); i += expressionNumOfOneInput) {
      List<Expression> expressions = new ArrayList<>(expressionNumOfOneInput);
      for (int j = 0; j < expressionNumOfOneInput; j++) {
        expressions.add(inputExpressions.get(i + j));
      }
      this.groupedInputExpressions.add(expressions);
    }
  }
For an aggregate function that takes two inputs, the inputExpressions may be like
[root.sg.d1.s1, root.sg.d1.s2, root.sg.d2.s1, root.sg.d2.s2]. The inputExpressions is a
one-dimensional List, but it is split by expressionNumOfOneInput. The split result is stored in
groupedInputExpressions So the returned map of this method is : <"root.sg.d1.s1,
root.sg.d1.s2", [root.sg.d1.s1, root.sg.d1.s2]> <"root.sg.d2.s1, root.sg.d2.s2",
[root.sg.d2.s1, root.sg.d2.s2]>
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/parameter/CrossSeriesAggregationDescriptor.java