Аналогично (с результатами Гордона), с ratio_to_report
и case
:
SQL> with temp as
2 (select id,
3 volume,
4 round(ratio_to_report (volume) over (), 9) pct
5 from test
6 )
7 select id,
8 volume,
9 pct,
10 round(sum(pct) over (order by volume desc) * 100, 1) cumsum,
11 --
12 case when sum(pct) over (order by volume desc) <= 0.25 then 1
13 when sum(pct) over (order by volume desc) <= 0.50 then 2
14 when sum(pct) over (order by volume desc) <= 0.75 then 3
15 else 4
16 end quartile
17 from temp
18 order by volume desc;
ID VOLUME PCT CUMSUM QUARTILE
---- ---------- ---------- ------ ----------
ID9 7500 ,182038835 18,2 1
ID8 7000 ,169902913 35,2 2
ID2 6400 ,155339806 50,7 3
ID3 5800 ,140776699 78,9 4
ID6 5800 ,140776699 78,9 4
ID5 5200 ,126213592 91,5 4
ID4 1400 ,033980583 94,9 4
ID10 800 ,019417476 96,8 4
ID7 700 ,016990291 98,5 4
ID1 600 ,014563107 100,0 4
10 rows selected.
SQL>