【和SQL对比】对分组结果过滤

有多少部门的平均年龄超过30岁或有三个以上员工年龄超过40岁
1 select count(*)
2 from (select 部门 from 员工表
3       group by 部门
4       having avg(年龄)>30 or
5                 sum( case when 年龄>40 then 1 else 0 end )>3)

分组的本意是将源集合拆分成若干子集,但SQL无法保存这种集合的集合,强迫计算出汇总值,继续针对子集合的过滤计数就需要转换成条件求和,而对结果集的再次汇总则要用嵌套的子查询完成。

A
1 =demo.query(“select * from 员工表”).group(部门)
2 =A1.count(~.avg(年龄)>30 || ~.count(年龄>40)>3)

集算器可以保持分组结果,即集合的集合,按思维过程计算即可。