I\'ve been surprisingly unable to find an nth percentile function for postgresql.
I am using this via mondrian olap tool so i just need an aggregate function which r
With PostgreSQL 9.4 there is native support for percentiles now, implemented in Ordered-Set Aggregate Functions:
percentile_cont(fraction) WITHIN GROUP (ORDER BY sort_expression)continuous percentile: returns a value corresponding to the specified fraction in the ordering, interpolating between adjacent input items if needed
percentile_cont(fractions) WITHIN GROUP (ORDER BY sort_expression)multiple continuous percentile: returns an array of results matching the shape of the fractions parameter, with each non-null element replaced by the value corresponding to that percentile
See the documentation for more details: http://www.postgresql.org/docs/current/static/functions-aggregate.html
and see here for some examples: https://github.com/michaelpq/michaelpq.github.io/blob/master/_posts/2014-02-27-postgres-9-4-feature-highlight-within-group.markdown
CREATE TABLE aa AS SELECT generate_series(1,20) AS a;
--SELECT 20
WITH subset AS (
SELECT a AS val,
ntile(4) OVER (ORDER BY a) AS tile
FROM aa
)
SELECT tile, max(val)
FROM subset GROUP BY tile ORDER BY tile;
tile | max
------+-----
1 | 5
2 | 10
3 | 15
4 | 20
(4 rows)