2016-06-28 38 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