番号でインデックス付けされたメンバーのリストに対して簡単なクエリを実行し、それらを同じサイズの「バケット」にグループ化したいと思います。したがって、基本クエリは次のとおりです。
select my_members.member_index from my_members where my_members.active=1;
1000 のメンバー インデックス番号が返されたとします。今度は、最大メンバー インデックスと最小メンバー インデックスによってそれらを 10 個の同じサイズのグループに分割したいと考えています。何かのようなもの:
0 ~ 400 のアクティブ メンバー: 100 401 ~ 577 のアクティブ メンバー: 100 ... 1584 ~ 1765 のアクティブ メンバー: 100
私が思いついた最善の方法は、rownum 制限を増やして max(my_members.member_index) を繰り返しクエリすることです。
for r in 1 .. 10 loop
select max(my_members.member_index)
into ranges(r)
from my_members
where my_members.active = 1
and rownum < top_row
order by my_members.member_index asc;
top_row := top_row + 100;
end loop;