SQL对取值范围进行分组汇总的几种办法
SQL对取值范围进行分组汇总的几种办法在统计工作中,我们经常遇到对一个数量的取值范围进行分组汇总的情况,比如
假定id取值为1~20000,按照组距5000进行分组,我们要分别求出5000以下包括5000,5000以上10000以下包括10000,10000以上15000以下包括15000,15000以上20000以下包括20000。
的计数,可以用内置取整函数ceil和除法运算得到。
select ceil(id/5000) f, count(1) cnt from t1 group by ceil(id/5000) order by 1;
F CNT
---------- ----------
1 5000
2 5000
3 5000
4 5000
但是这种方法我们无法对不等距分组的情况进行处理,
假定我们要分别求出500以下包括500,500以上1000以下包括1000,1000以上5000以下包括5000,5000以上20000以下包括20000的计数,ceil函数就无能为力了。
这时我们可以用到自定义函数,
create or replace FUNCTION g2(v NUMBER) RETURN INT IS
TYPE it IS TABLE OF INT;
BEGIN
IF v>0 AND v500 AND v1000 AND v5000 AND v
when>
when>
when> else 0
end) f,
count(1) cnt from t1 group by
(case
when>
when>
when>
when> else 0
end)
order by 1;
F CNT
---------- ----------
1 500
2 500
3 4000
4 15000
页:
[1]