Search notes:

SQL: PERCENTILE_CONT

percentile_cont() is not recognized by SQLite 3.27.2 or MySQL 8.

Create a test table

create table tq84_perc_cont (
   grp    varchar(10),
   val    decimal(5,3)
);
Github repository about-SQL, path: /select/analytic/percentile/cont/create-table.sql

Insert some values

insert into tq84_perc_cont values ('A',  5.1);
insert into tq84_perc_cont values ('A', 17.8);
insert into tq84_perc_cont values ('A',  5.3);
insert into tq84_perc_cont values ('A',  4.8);

insert into tq84_perc_cont values ('B', 15.2);
insert into tq84_perc_cont values ('B',  8.9);
insert into tq84_perc_cont values ('B',  6.3);
insert into tq84_perc_cont values ('B', 22.1);
Github repository about-SQL, path: /select/analytic/percentile/cont/insert.sql

Selecting the median

select
   grp,
   val,
   percentile_cont(0.5) within group (order by val) over (                ) median,
   percentile_cont(0.5) within group (order by val) over (partition by grp) median_grp
from
   tq84_perc_cont
;
Github repository about-SQL, path: /select/analytic/percentile/cont/select.sql

Using the aggregate

select
   grp,
   percentile_cont(0.5) within group (order by val)  median
from
   tq84_perc_cont   
group by
   grp;
Github repository about-SQL, path: /select/analytic/percentile/cont/select-group-by.sql
The aggregate (group by) version of percentil_cont works with Oracle 19c.
It does not work on SQL Server 2017, the error message being The function 'percentile_cont' must have an OVER clause.

See also

PERCENTILE_DISC does not interpolate the returned value, rather it returns one that already exists.

Index