Calculating Median in PostgreSQL
Media (not AVG) is not directly supported in PostgreSQL, but, fortunately, can be easily calculated using the following:
SELECT CASE WHEN c % 2 = 0 AND c > 1 THEN (a[1]+a[2])/2 ELSE a[1] END
FROM
(
SELECT ARRAY(SELECT my_col FROM my_table ORDER BY my_cal OFFSET (c-1)/2 LIMIT 2) AS a, c
FROM (SELECT count(*) AS c FROM my_table where my_col is not null) AS count
OFFSET 0
)
AS midrows;
Based on a nice tip found on http://okbob.blogspot.de/2009/11/aggregate-function-median-in-postgresql.html
In the following is another idea, found on http://blog.carbonfive.com/2013/01/17/postgresql-aggregates-medians-and-a-brief-command-reference/, which uses the ntile
function to calculate a approximate median. it works fine if the number of rows is uneven, but not if the number of rows is even
SELECT
MAX(column) as "Median of Column"
FROM
(
SELECT
column,
ntile(2) OVER (ORDER BY column) AS bucket
FROM
table
) as t
WHERE bucket = 1
GROUP BY bucket;
Written by Gefei
Related protips
Have a fresh tip? Share with Coderwall community!
Post
Post a tip
Best
#Sql
Authors
Sponsored by #native_company# — Learn More
#native_title#
#native_desc#