0
点赞
收藏
分享

微信扫一扫

(接上文)n阶 groupby实现

杨小羊_ba17 2022-07-27 阅读 47


/**

* 默认返回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;

}

举报

相关推荐

接上文

又接上文

网页前端笔记7 (接上文)

爬N阶楼梯

输出n阶方阵

n阶指针(C++)

n阶幻方类的实现(C++)

python创建n阶空方阵

0 条评论