DataSet聚合计算
最后更新:2023-10-18 19:49:32
|
状态:未完成
1.分组
如提供一个职员列表的set
[
{id:1, name:'a', dept:'财务部', age:20}
,{id:2, name:'b', dept:'财务部', age:30}
,{id:3, name:'c', dept:'市场部', age:35}
]
根据部门分组
set.group("dept"); //这里可以提供多列
返回结果
[
{dept:"财务部"
,items:[
{id:1, name:'a', dept:'财务部', age:20}
,{id:2, name:'b', dept:'财务部', age:30}
]
},
{
dept:"市场部"
,items:[
{id:3, name:'c', dept:'市场部', age:35}
]
}
]
2.聚合
set.avg("age") 返回age平均值
set.sum("age") 返回age合计值
set.max("age") 返回age最大的一行(注意这里返回的是一行,也就是DataRow,而不是属性值35)
set.maxInt("age") 返回age最大值
也可以
set.agg(boolean empty, Aggregation agg, String key)
enpty:表示是空值是否参与计算,计算平均值时有
可选的聚合枚举:
根据姓名分组dept分组并计算组人数,默认情况下计保留总人数,不保留当前组中的人员列表,如果需要保留参考最后的完整参数说明
set.group(Aggregation.COUNT, "dept")
返回
[
{dept:"财务部",count:2}
如提供一个职员列表的set
[
{id:1, name:'a', dept:'财务部', age:20}
,{id:2, name:'b', dept:'财务部', age:30}
,{id:3, name:'c', dept:'市场部', age:35}
]
根据部门分组
set.group("dept"); //这里可以提供多列
返回结果
[
{dept:"财务部"
,items:[
{id:1, name:'a', dept:'财务部', age:20}
,{id:2, name:'b', dept:'财务部', age:30}
]
},
{
dept:"市场部"
,items:[
{id:3, name:'c', dept:'市场部', age:35}
]
}
]
2.聚合
set.avg("age") 返回age平均值
set.sum("age") 返回age合计值
set.max("age") 返回age最大的一行(注意这里返回的是一行,也就是DataRow,而不是属性值35)
set.maxInt("age") 返回age最大值
也可以
set.agg(boolean empty, Aggregation agg, String key)
enpty:表示是空值是否参与计算,计算平均值时有
可选的聚合枚举:
MIN ("MIN" , "最小"), MIN_DECIMAL ("MIN_DECIMAL" , "最小"), MIN_DOUBLE ("MIN_DOUBLE" , "最小"), MIN_FLOAT ("MIN_FLOAT" , "最小"), MIN_INT ("MIN_INT" , "最小"), MAX ("MAX" , "最大"), MAX_DECIMAL ("MAX_DECIMAL" , "最大"), MAX_DOUBLE ("MAX_DOUBLE" , "最大"), MAX_FLOAT ("MAX_FLOAT" , "最大"), MAX_INT ("MAX_INT" , "最大"), AVG ("AVG" , "平均"), AVGA ("AVGA" , "平均(空值参与)"), SUM ("SUM" , "合计"), COUNT ("COUNT" , "数量"), COUNTA ("COUNT" , "数量(空值参与)"), STDEV ("STDEV" , "抽样标准偏差"), STDEVA ("STDEVA" , "抽样标准偏差(空值参与)"), STDEVP ("STDEVP" , "总体标准偏差"), STDEVPA ("STDEVPA" , "总体标准偏差(空值参与)"), VAR ("VAR" , "抽样方差"), VARA ("VARA" , "抽样方差(空值参与)"), VARP ("VARP" , "总体方差"), VARPA ("VARPA" , "总体方差(空值参与)");3.分组后聚合
根据姓名分组dept分组并计算组人数,默认情况下计保留总人数,不保留当前组中的人员列表,如果需要保留参考最后的完整参数说明
set.group(Aggregation.COUNT, "dept")
返回
[
{dept:"财务部",count:2}
,{dept:"市场部",count:1}
]
根据姓名分组dept分组并计算每组平均年龄
set.group( "age", Aggregation.COUNT, "dept")
返回
[
{dept:"财务部",avg:25}
,{dept:"市场部",avg:35}
]
完整参数
/** * 分组生聚合 * @param items 是否保留条目 如果为空则不保留 否则保留会在每个分组中添加items属性用来保存当前分组中的条件 * @param field 聚合结果保存属性 如果不指定则以 factor_agg命名 如 age_avg * @param factor 计算因子属性 取条目中的factor属性的值参与计算 * @param agg 聚合公式 参考Aggregation枚举 * @param keys 分组条件 指定属性相同的条目合成一组 * @param scale 精度(小数位) * @param round 舍入方式参考BigDecimal * ROUND_UP = 0 舍入远离零的舍入模式 在丢弃非零部分之前始终增加数字(始终对非零舍弃部分前面的数字加 1) 如:2.36 转成 2.4 * ROUND_DOWN = 1 接近零的舍入模式 在丢弃某部分之前始终不增加数字(从不对舍弃部分前面的数字加1,即截短). 如:2.36 转成 2.3 * ROUND_CEILING = 2 接近正无穷大的舍入模式 如果 BigDecimal 为正,则舍入行为与 ROUND_UP 相同 如果为负,则舍入行为与 ROUND_DOWN 相同 相当于是 ROUND_UP 和 ROUND_DOWN 的合集 * ROUND_FLOOR = 3 接近负无穷大的舍入模式 如果 BigDecimal 为正,则舍入行为与 ROUND_DOWN 相同 如果为负,则舍入行为与 ROUND_UP 相同 与ROUND_CEILING 正好相反 * ROUND_HALF_UP = 4 四舍五入 * ROUND_HALF_DOWN = 5 五舍六入 * ROUND_HALF_EVEN = 6 四舍六入 五留双(银行家舍入法) * 如果舍弃部分左边的数字为奇数,则舍入行为与 ROUND_HALF_UP 相同(四舍五入) * 如果为偶数,则舍入行为与 ROUND_HALF_DOWN 相同(五舍六入) * 如:1.15 转成 1.2,因为5前面的1是奇数;1.25 转成 1.2,因为5前面的2是偶数 * ROUND_UNNECESSARY=7 断言请求的操作具有精确的结果,因此不需要舍入 如果对获得精确结果的操作指定此舍入模式,则抛出 ArithmeticException * @return DataSet public DataSet group(String items,String field, String factor, Aggregation agg, int scale, int round, String ... keys)