How to divide a data set into equal size buckets

    技术2022-05-11  65

    Install scripts:drop table INTERVALS/create table INTERVALS(NAME varchar2(100), sal number(10,2))/insert into intervals(NAME,sal)select object_name, dbms_random.value(0,100) from all_objects/commit//*********************************************************************************************/Case scenario 1 - using on-the-fly pivot tableset pagesize 200set linesize 200with xas(select min(sal) mn, max(sal) mx from intervals)select (l-1)*(mx-mn)/10 start_value,  (l)*(mx-mn)/10 end_value, count(1) no_of_values     from intervals i,(select mn, mx from x),(select level l from dual connect by level <= 10)    where    sal>(case when l=1 then mn-0.001        else (l-1)*(mx-mn)/10 end) and  sal<=(l)*(mx-mn)/10    group by (l-1)*(mx-mn)/10 ,  (l)*(mx-mn)/10//*********************************************************************************************/Case scenario 2 - using width_bucket analytical functionset pagesize 200set linesize 200select  (int_no-1)*(end_int-start_int)/10 start_value,(int_no)*(end_int-start_int)/10 end_value, count(1) no_of_values from(select name, sal, width_bucket(sal,0,100.001,10) int_no,    min(sal) over (order by sal asc) start_int,    max(sal) over (order by sal desc) end_int from intervals)group by  int_no, start_int, end_int//*********************************************************************************************/ 

    Output 1:START_VALUE  END_VALUE NO_OF_VALUES----------- ---------- ------------          0         10         5061         10         20         5126         20         30         5195         30         40         5136         40         50         5058         50         60         5173         60         70         5221         70         80         5028         80         90         5053         90        100         5018/*******************************************************************/Output 2:START_VALUE  END_VALUE NO_OF_VALUES----------- ---------- ------------          0         10         5061         10         20         5126         20         30         5195         30         40         5136         40         50         5058         50         60         5173         60         70         5221         70         80         5028         80         90         5053         90        100         5018/*******************************************************************/ 


    最新回复(0)