当前位置:网站首页>postgresql Window Functions

postgresql Window Functions

2022-08-09 06:59:00 谷满满

Window Functions

窗口函数不会像非窗口聚合调用那样使行分组到单个输出行中。相反,这些行保留了它们单独的身份。不可以和GROUP BY、 WHERE子句一起用。如果在执行窗口计算后需要过滤或分组行,则可以使用子选择。

SELECT depname, empno, salary, avg(salary) OVER (PARTITION BY depname) FROM empsalary;

 

您还可以使用OVER中的顺序BY来控制窗口函数处理行的顺序。(窗口顺序BY甚至不必与行的顺序匹配。)下面是一个例子:

SELECT depname, empno, salary,
 rank() OVER (PARTITION BY depname ORDER BY salary DESC)
FROM empsalary;

 

 

窗口函数结合where子句使用示例

SELECT depname, empno, salary, enroll_date
FROM
 (SELECT depname, empno, salary, enroll_date,
 rank() OVER (PARTITION BY depname ORDER BY salary DESC,
 empno) AS pos
 FROM empsalary
 ) AS ss
WHERE pos < 3; 

当一个查询涉及多个窗口函数时,可以用一个单独的OVER子句写出每个窗口函数,但如果多个函数需要相同的窗口行为,这是重复的和容易出错的。相反,每个窗口行为都可以在窗口子句中命名,然后在OVER中引用。例如

SELECT sum(salary) OVER w, avg(salary) OVER w
 FROM empsalary
 WINDOW w AS (PARTITION BY depname ORDER BY salary DESC); 

原网站

版权声明
本文为[谷满满]所创,转载请带上原文链接,感谢
https://blog.csdn.net/antch620/article/details/126158416