【和SQL对比】对分组结果排序

人数最多和最少的两个部门

SQL解法

select 部门
from (select 部门,row_number() over (order by 人数 desc) 正排名,
                   row_number() over (order by 人数 asc) 倒排名
      from (select 部门, count(*) 人数 from 员工表
            group by 部门))
where 正排名=1 or 倒排名=1 order by 正排名

对分组结果集过滤用到跨行计算时,无法再使用简单的having子句写出,需要嵌套的子查询才能完成计算。

SPL解法

A
1 =demo.query(“select * from 员工表”).group(部门)
2 =A1.sort(~.len()).m([-1,1])
3 =A2.(部门)

对于SPL来讲,仍然是对集合排序和选出,只是集合的成员又是个集合而已。