SQL统计功能的Java实现

常常碰到类似于SQL中的分组,排序和统计的实现,实现的方法很多,通常是将待统计的数据放入数据集合(array,list,map,etc.),然后根据条件进行分组(group by),或者需要排序(order by),再进行统计(sum,count,average,etc.)

 

1.声明数据集合

Collection<T> records

 

2.根据条件进行分组--格子法:

例1:将学生成绩按班级分组,如有12个班级,建立12个格子,每个班的数据装入相应的班级格子

T[] arr=new T[12]

Map<String,T> map=new HashMap<String,T>(12)

 

例2:将全年销售额按周进行分组,一周一个格子,每周的数据放入相应的格子

a.需要多少个格子

int cnt=divideAndCeil(365,7)=53,建立53个格子

T[] arr=new T[cnt]

 

b.要放入哪个格子

long interval=7*DateUtil.lDay;

int index=divideAndFloor(curDate.getTime()-beginDate.getTime(),interval)

 

注:

divideAndCeil(a,b) => ceil(a/b)

divideAndFloor(a,b) => floor(a/b)

 

注:这些是比较简单的例子,实际情况可能比这复杂得多,分组也可能有好几级,这就需要实现一个专门的函数来得到相应的索引,以便进行正确的分组插入

 

3.排序

最简单的实现方法是Java的Compare接口,

 

4.统计

建立一个与分组个数相同格子数的集合,每个格子中放计数器,总和,平均值等统计值

Class Counter<T>{

    T sum

    T count;

    T average;

    ...

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值