/**
* 默认返回select * 的结果 输入就是生成的数据 输入的数据不同于cloudwave的就是没有排序
*
* @param type
* 0没有括号 1max 2min 3sum 4avg 5count
*/
public static Object[][] groupby(OneRow[] rows,
int[] groupbyIndex,
int type) {
display(rows);
List<OneRow> resultMatrix = new ArrayList<OneRow>();
if (type == 0) {
// 鉴于有很多groupby的列,就从前到后 两两 两两 的分析
List<KeyAndRows>[] map = new ArrayList[groupbyIndex.length];
for (int i = 0; i < map.length; i++) {
map[i] = new ArrayList<KeyAndRows>();
}
int groupbyColumn = groupbyIndex[0];
for (int i = 0; i < rows.length; i++) {
Object key = rows[i].column[groupbyColumn];
if (contains(map[0],
key)) {
int index = indexOf(map[0],
key);
map[0].get(index).list.add(i);
map[0].add(index,
map[0].get(index));
map[0].remove(index + 1);
} else {
List<Integer> list = new ArrayList();
KeyAndRows kr = new KeyAndRows(key,
list);
kr.list.add(i);
map[0].add(kr);
}
}
System.out.println();
KeyAndRows[] krs = map[0].toArray(new KeyAndRows[0]);
display2(krs);
for (int j = 0; j < groupbyIndex.length - 1; j++) {
for (int i = 0; i < map[j].size(); i++) {
KeyAndRows kr = map[j].get(i);
groupbyColumn = groupbyIndex[j + 1];
for (int row : kr.list) {
Object key = rows[row].column[groupbyColumn];
if (contains(map[j + 1],
key)) {
int index = indexOf(map[j + 1],
key);
map[j + 1].get(index).list.add(row);
map[j + 1].add(index,
map[j + 1].get(index));
map[j + 1].remove(index + 1);
} else {
List<Integer> list = new ArrayList();
KeyAndRows kr2 = new KeyAndRows(key,
list);
kr2.list.add(row);
map[j + 1].add(kr2);
}
}
for (KeyAndRows krTemp : map[j + 1]) {
krTemp.key = null;
}
}
}
System.out.println();
krs = map[1].toArray(new KeyAndRows[0]);
display2(krs);
System.out.println();
krs = map[2].toArray(new KeyAndRows[0]);
display2(krs);
List<Integer> result = new ArrayList();
for (KeyAndRows kr : map[groupbyIndex.length-1]) {
result.add(kr.list.get(0));
}
for (int i = 0; i < result.size(); i++) {
resultMatrix.add(rows[result.get(i)]);
}
}
System.out.println();
OneRow[] resultRows= resultMatrix.toArray(new OneRow[0]);
display(resultRows);
Object[][] result=new Object[resultRows.length][OneRow.colCount];
for(int i=0;i<result.length;i++){
for(int j=0;j<result[0].length;j++){
result[i][j]=resultRows[i].column[j];
}
}
return result;
}