2016-06-28 6 views
1

У меня есть этот запрос на выборку:найти сумму столбца, который содержит оконную функцию

SELECT 
    total, 
    COALESCE(total - Lag(total)OVER(ORDER BY total), 0) AS dif_total 
FROM (select count(*) as total 
    FROM 
     tbl_person 
    left join 
     tbl_census 
    on 
      tbl_census.person_id = tbl_person.person_id 
    group by extract(year from tbl_census.date) 
    ) abc 

Есть ли способ, которым я мог бы найти сумму dif_total столбца?
Я не могу использовать Sum(), потому что он содержит функцию окна.

Я попытался сохранить столбец в массив, потому что, возможно, я мог бы вызвать функцию и преобразовать массив в столбец, а затем использовать Sum().
Но я испортил это.

Вот мой запрос для функции.

CREATE OR REPLACE function growth() Returns int[] as $$ 
declare total2 integer[]; 
BEGIN 
     SELECT 
      total, 
      COALESCE(total - Lag(total)OVER(ORDER BY total), 0) into total2 
     FROM 
      (select count(*) as total 
      from 
       tbl_person 
      group by extract(year from bdate) 
      ) abc ; 
RETURN total2; 
END; $$ LANGUAGE plpgsql; 

Функция запрос выполняется успешно и не показывает предупреждения или ошибки, но я думаю, что я делаю это неправильно, потому что, когда я пытаюсь выбрать его будет сказать

значение массива должно начинаться с " {"или информация об измерении

Я очень новичок в использовании хранимой функции в postgre.
Какие изменения я должен сделать, чтобы моя функция работала? Или каковы другие способы для меня суммировать столбец dif_total выше?

ответ

1

Почему бы вам просто не обернуть его другим выбором?

SELECT total,sum(dif_total) as total_2 
FROM (YOUR QUERY HERE...) 
GROUP BY total