查找包含窗口函数

时间:2016-06-28 08:10:08

标签: sql postgresql

我有这个选择查询:

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 个答案:

答案 0 :(得分:1)

为什么不用另一个选择包裹它?

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