public static function getKeyValue(o:*,itemName:String):String
{
var keyValue:String=""
var groupByArr:Array=itemName.split("_")
for each(var col:String in groupByArr)
{
//a2.push(o[groupByArr[]])
if(keyValue=="")
keyValue=o[col]
else
keyValue+="_"+o[col]
}
return keyValue
}
/**
*对数组进行sql分组操作
* @param a1
* @param itemName 分组字段 字段之间用_分隔
* @param ref 要求出的聚合字段用_分隔,前面为字段名,后面为聚合类型,例如"score_sum","score_min","score_max","price_max"
* @return
* var o1:Object={nn:"eee",num:32,score:100,price:90}
var o2:Object={nn:"eee1",num:321,score:60,price:60}
var o3:Object={nn:"eee1",num:322,score:70,price:70}
var o4:Object={nn:"eee2",num:322,score:80,price:120}
var o5:Object={nn:"eee2",num:322,score:80,price:120}
var c:Array=[]
c.push(o1);
c.push(o2);
c.push(o3);
c.push(o4);
c.push(o5);
var a:Array=groupbyArray(c,"num_nn","score_sum","score_min","score_max","price_max")
for(var i:int=0;i<a.length;i++)
{
var key:String=a[i].key
trace(key+"_________"+a[i].sum[i]["score"]+"_"+a[i].max[i]["score"]+"_"+a[i].min[i]["score"]+"_"+a[i].max[i]["price"]+"_"+a[i].len)
}
*/
public static function groupbyArray(a1:Array,itemName:String,...ref):Array
{
var a2:Array=[]
var result:Array=[]
for each(var o:Object in a1)//求出group by键
{
a2.push(getKeyValue(o,itemName));
}
var newArray:Array = [];
for(var i:int = 0; i < a2.length; i++)
{
if (newArray.indexOf(a2[i]) == -1)
newArray.push(a2[i]);
}
trace(newArray);
var len:int=ref.length
var keyArr:Array=[]
for(var j:int=0;j<len;j++)
{
var c:Array=ref[j].toString().split("_")
keyArr[j]={key:c[0],type:c[1]}
}
var maxNum:Array=[]
var minNum:Array=[]
var sumNum:Array=[]
var averageNum:Array=[]
var groupLen:Array=[]
for(var k:int=0;k<newArray.length;k++)
{
var item:String=newArray[k].toString()
groupLen[item]=0
for each(var o2:Object in a1)
{
if(item==getKeyValue(o2,itemName))//o2[itemName])
{
groupLen[item]+=1
for each(var d:Object in keyArr)
{
if(d.type=="max")
{
if(!maxNum[k])
maxNum[k]=[]
if(!maxNum[k][d.key] || maxNum[k][d.key]<o2[d.key])
maxNum[k][d.key]=o2[d.key]
}
else if(d.type=="min")
{
if(!minNum[k])
minNum[k]=[]
if(!minNum[k][d.key] || minNum[k][d.key]>o2[d.key])
minNum[k][d.key]=o2[d.key]
}
else if(d.type=="sum")
{
if(!sumNum[k])
sumNum[k]=[]
if(!sumNum[k][d.key])
sumNum[k][d.key]=0
sumNum[k][d.key]+=o2[d.key]
}
}
}
}
result[k]={max:maxNum,min:minNum,sum:sumNum,aver:averageNum,key:item,len:groupLen[item]}
}
return result;
}
{
var keyValue:String=""
var groupByArr:Array=itemName.split("_")
for each(var col:String in groupByArr)
{
//a2.push(o[groupByArr[]])
if(keyValue=="")
keyValue=o[col]
else
keyValue+="_"+o[col]
}
return keyValue
}
/**
*对数组进行sql分组操作
* @param a1
* @param itemName 分组字段 字段之间用_分隔
* @param ref 要求出的聚合字段用_分隔,前面为字段名,后面为聚合类型,例如"score_sum","score_min","score_max","price_max"
* @return
* var o1:Object={nn:"eee",num:32,score:100,price:90}
var o2:Object={nn:"eee1",num:321,score:60,price:60}
var o3:Object={nn:"eee1",num:322,score:70,price:70}
var o4:Object={nn:"eee2",num:322,score:80,price:120}
var o5:Object={nn:"eee2",num:322,score:80,price:120}
var c:Array=[]
c.push(o1);
c.push(o2);
c.push(o3);
c.push(o4);
c.push(o5);
var a:Array=groupbyArray(c,"num_nn","score_sum","score_min","score_max","price_max")
for(var i:int=0;i<a.length;i++)
{
var key:String=a[i].key
trace(key+"_________"+a[i].sum[i]["score"]+"_"+a[i].max[i]["score"]+"_"+a[i].min[i]["score"]+"_"+a[i].max[i]["price"]+"_"+a[i].len)
}
*/
public static function groupbyArray(a1:Array,itemName:String,...ref):Array
{
var a2:Array=[]
var result:Array=[]
for each(var o:Object in a1)//求出group by键
{
a2.push(getKeyValue(o,itemName));
}
var newArray:Array = [];
for(var i:int = 0; i < a2.length; i++)
{
if (newArray.indexOf(a2[i]) == -1)
newArray.push(a2[i]);
}
trace(newArray);
var len:int=ref.length
var keyArr:Array=[]
for(var j:int=0;j<len;j++)
{
var c:Array=ref[j].toString().split("_")
keyArr[j]={key:c[0],type:c[1]}
}
var maxNum:Array=[]
var minNum:Array=[]
var sumNum:Array=[]
var averageNum:Array=[]
var groupLen:Array=[]
for(var k:int=0;k<newArray.length;k++)
{
var item:String=newArray[k].toString()
groupLen[item]=0
for each(var o2:Object in a1)
{
if(item==getKeyValue(o2,itemName))//o2[itemName])
{
groupLen[item]+=1
for each(var d:Object in keyArr)
{
if(d.type=="max")
{
if(!maxNum[k])
maxNum[k]=[]
if(!maxNum[k][d.key] || maxNum[k][d.key]<o2[d.key])
maxNum[k][d.key]=o2[d.key]
}
else if(d.type=="min")
{
if(!minNum[k])
minNum[k]=[]
if(!minNum[k][d.key] || minNum[k][d.key]>o2[d.key])
minNum[k][d.key]=o2[d.key]
}
else if(d.type=="sum")
{
if(!sumNum[k])
sumNum[k]=[]
if(!sumNum[k][d.key])
sumNum[k][d.key]=0
sumNum[k][d.key]+=o2[d.key]
}
}
}
}
result[k]={max:maxNum,min:minNum,sum:sumNum,aver:averageNum,key:item,len:groupLen[item]}
}
return result;
}