grouping分级汇总用法

declare @t table(DeptNo varchar(20),WorkNo int,salary int)
insert @t select '电子部',  123,    2300
union all select '电子部',  124,    2500
union all select '广告部',  125,    1200
union all select '广告部',  126,    1500
union all select '广告部',  127,   1300


select
DeptNo=case when grouping(DeptNo)=1 then '总计'
     when grouping(workNo)=1 then '合计'
            else DeptNo end,
WorkNo=case when grouping(workNo)=1 then count(1)
            else WorkNo end,
sum(salary) as salary
from @t a
group by  DeptNo,WorkNo
with rollup

 
Collectors.groupingBy是Java 8中的一个用于分组的工具,它可以将一个Stream按照指定的条件进行分组,并将分组后的结果存储在一个Map中。具体使用方法如下: 1.按照某个属性进行分组: ``` Map<String, List<User>> groupByDept = users.stream() .collect(Collectors.groupingBy(User::getDept)); ``` 上述代码将根据User对象的dept属性进行分组,将分组后的结果存储在一个Map<String, List<User>>中,其中Key为dept属性的值,Value为dept属性值相同的User对象列表。 2.按照某个属性进行分组,并对分组后的结果进行统计: ``` Map<String, Long> groupByDeptThenCount = users.stream() .collect(Collectors.groupingBy(User::getDept, Collectors.counting())); ``` 上述代码将根据User对象的dept属性进行分组,并统计每个分组中元素的个数,将分组后的结果存储在一个Map<String, Long>中,其中Key为dept属性的值,Value为dept属性值相同的User对象个数。 3.按照某个属性进行分组,并对分组后的结果进行求和、平均值等操作: ``` Map<String, Double> groupByDeptThenGetAvgSalary = users.stream() .filter(user -> Objects.nonNull(user.getDept())) //比较的字段不能有null值 .collect(Collectors.groupingBy(User::getDept, Collectors.averagingDouble(User::getSalary))); ``` 上述代码将根据User对象的dept属性进行分组,并统计每个分组中元素的salary属性的平均值,将分组后的结果存储在一个Map<String, Double>中,其中Key为dept属性的值,Value为dept属性值相同的User对象的salary属性的平均值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值