【和sql对比】对分组结果过滤 | 润乾 -pg游戏官网登录入口

有多少部门的平均年龄超过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可以保持分组结果,即集合的集合,按思维过程计算即可。

网站地图