【和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特有的条件分组很方便地完成此类计算,分组出来的子集合可重复利用。