zuier 发表于 2018-10-21 14:04:17

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]
查看完整版本: SQL对取值范围进行分组汇总的几种办法