René Nyffenegger's collection of things on the web | |
René Nyffenegger on Oracle - Most wanted - Feedback
- Follow @renenyffenegger
|
percentile_disc [Oracle SQL analytic function] | ||
percentile_disc returns a number between 0 and 1.
create table pd_tab (n number); insert into pd_tab values (null); insert into pd_tab values (null); insert into pd_tab values ( 1); insert into pd_tab values ( 2); insert into pd_tab values ( 3); insert into pd_tab values ( 4); insert into pd_tab values ( 10); insert into pd_tab values ( 10); insert into pd_tab values ( 10); insert into pd_tab values ( 100); insert into pd_tab values ( 100); insert into pd_tab values (1000);
percentile_desc ignores null values.
create view pd_view as select n, cume_dist() over (order by n) cume_dist_ from pd_tab where n is not null; select * from pd_view; N CUME_DIST_ ---------- ---------- 1 .1 2 .2 3 .3 4 .4 10 .7 10 .7 10 .7 100 .9 100 .9 1000 1 define cd=.7 select percentile_disc(&cd) within group (order by n ) percentile_disc, min(case when cume_dist_ >= &cd then n else null end) calculated from pd_view; PERCENTILE_DISC CALCULATED --------------- ---------- 10 10 define cd=.25 select percentile_disc(&cd) within group (order by n ) percentile_disc, min(case when cume_dist_ >= &cd then n else null end) calculated from pd_view; PERCENTILE_DISC CALCULATED --------------- ---------- 3 3 |