【和SQL对比】使用位置选出子集

将学生按成绩蛇行分作两班,即1、4、5、8、…为一班,2、3、6、7、…为二班

SQL解法

一班

select 姓名,成绩
from (select 姓名,成绩,
            row_number() over(order by绩 desc) 排名
      from 成绩表)
where mod(排名,4)=0 or mod(排名,4)=1 order by 排名

二班

select 姓名,成绩
from (select 姓名,成绩,
            row_number() over(order by 成绩 desc) 排名
      from 成绩表)
where mod(排名,4)=2 or mod(排名,4)=3 order by 排名

SQL的无序集合机制必须借助子查询制造出一个序号才能完成相关的位置访问。

SPL解法

A
1 =demo.query("select * from 成绩表").sort(成绩:-1)
2 =A1.step(4,1,4) 一班
3 =A1.step(4,2,3) 二班

SPL中根据位置访问成员很轻松。