【和sql对比】对分组结果过滤 | 润乾 -欧洲杯在线开户
有多少部门的平均年龄超过30岁或有三个以上员工年龄超过40岁
sql解法
select count(*) from (select 部门 from 员工表 group by 部门 having avg(年龄)>30 or sum( case when 年龄>40 then 1 else 0 end )>3)
分组的本意是将源集合拆分成若干子集,但sql无法保存这种集合的集合,强迫计算出汇总值,继续针对子集合的过滤计数就需要转换成条件求和,而对结果集的再次汇总则要用嵌套的子查询完成。
spl解法
a | |
1 | =demo.query(“select * from 员工表”).group(部门) |
2 | =a1.count(~.avg(年龄)>30 || ~.count(年龄>40)>3) |
spl可以保持分组结果,即集合的集合,按思维过程计算即可。