public List<String> getActualPartialAggregationNames(String aggregationType) {
    List<String> outputAggregationNames = new ArrayList<>();
    switch (aggregationType) {
      case AVG:
        outputAggregationNames.add(SqlConstant.COUNT);
        outputAggregationNames.add(SqlConstant.SUM);
        break;
      case FIRST_VALUE:
        outputAggregationNames.add(FIRST_VALUE);
        outputAggregationNames.add(SqlConstant.MIN_TIME);
        break;
      case LAST_VALUE:
        outputAggregationNames.add(SqlConstant.LAST_VALUE);
        outputAggregationNames.add(SqlConstant.MAX_TIME);
        break;
      case TIME_DURATION:
        outputAggregationNames.add(SqlConstant.MAX_TIME);
        outputAggregationNames.add(SqlConstant.MIN_TIME);
        break;
      default:
        // TODO how about UDAF?
        outputAggregationNames.add(aggregationType);
    }
    return outputAggregationNames;
  }
aggregation align by device, and aggregation is `count_if` or `diff`, or aggregation used with
group by parameter (session, variation, count), use the old aggregation logic
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/SourceRewriter.java