【和SQL对比】可重复的条件分组

按在公司的工龄将员工分段分组统计每组的男女工人数
分段规则:一年之内、一至三年、三年以上、五年以上

SQL解法

with A as (select 1 序号,'一年以内' 分段,0 低限,1 高限
    from dual union
    select 2,'一至三年',1,3 from dual union
    select 3,'三年以上',3,100 from dual union
    select 4,'五年以上',5,100 from dual)
select 分段,
    (select count(*) from 员工表
    where 工龄>=A.低限 and 工龄<A.高限 and 性别='男') 男工数,
    (select count(*) from 员工表
    where 工龄>=A.低限 and 工龄<A.高限 and 性别='女') 女工数
from A order by 序号

可重的条件分组使用连接来计算会相当麻烦,用子查询书写会清晰些,但又会导致同一子集被重复计算。

SPL解法

A B
1 arg<1 一年以内
2 arg>=1 && arg<3 一至三年
3 arg>=3 三年以上
4 arg>=5 五年以上
5 =demo.query(“select * from 员工表”).enum@r([A1:A4],工龄) =[B1:B4]
6 =A5.new(B5(#):分段, ~.count(性别==”男”):男工数,
7 ~.count(性别==”女”):女工数)

SPL特有的条件分组很方便地完成此类计算,分组出来的子集合可重复利用。