A mídia (não o AVG) não tem suporte direto no PostgreSQL, mas, felizmente, pode ser facilmente calculada usando o seguinte:
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;
Com base em uma boa dica encontrada em http://okbob.blogspot.de/2009/11/aggregate-function-median-in-postgresql.html
A seguir está outra ideia, encontrada em http://blog.carbonfive.com/2013/01/17/postgresql-aggregates-medians-and-a-brief-command-reference/ , que usa a ntile
função para calcular um valor aproximado mediana. funciona bem se o número de linhas for desigual, mas não se o número de linhas for par
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;