06 -数据分析与SQL- Lesson6 (选修) SQL 窗口函数

06 /数据分析与SQL/ Lesson6 (选修) SQL 窗口函数

2.视频:窗口函数 1

详细可以参考,介绍的很详细:/PostgreSQL’s 文档/

窗口函数有些像聚合函数,区别是窗口函数不会像聚合那样把每一类做一行输出,而依然是每行输出,这就能在一个表格中提供更多的数据,比如说下面这个官网的数据(注意OVER是窗口函数的标志):

直接使用窗口函数:

可以看到只是增加了一列,这列是所有salary的sum,对比salary和sum,可以看到每个员工的工资和总工资支出的对比。

SELECT salary, sum(salary) OVER () FROM empsalary;
 salary |  sum  
--------+-------
   5200 | 47100
   5000 | 47100
   3500 | 47100
   4800 | 47100
   3900 | 47100
   4200 | 47100
   4500 | 47100
   4800 | 47100
   6000 | 47100
   5200 | 47100
(10 rows)

增加Orderby:

增加了orderby,就相当于把orderby内的salary排序,并且逐渐加和。这种方式在计算现金流的时候就很有用,可以看按照时间顺序,每笔损益给现金流带来的影响。

SELECT salary, sum(salary) OVER (ORDER BY salary) FROM empsalary;
 salary |  sum  
--------+-------
   3500 |  3500
   3900 |  7400
   4200 | 11600
   4500 | 16100
   4800 | 25700
   4800 | 25700
   5000 | 30700
   5200 | 41100
   5200 | 41100
   6000 | 47100
(10 rows)

增加partition by

如果在over中增加partition by,则可以进一步拆分为小组,比如官网的这个例子,可以看出develop部门的ave工资是5020,personnel的平均工资是3700等等,这样在比较时就有了更详细的资料。

SELECT depname, empno, salary, avg(salary) OVER (PARTITION BY depname) FROM empsalary;
depname  | empno | salary |          avg          
-----------+-------+--------+-----------------------
 develop   |    11 |   5200 | 5020.0000000000000000
 develop   |     7 |   4200 | 5020.0000000000000000
 develop   |     9 |   4500 | 5020.0000000000000000
 develop   |     8 |   6000 | 5020.0000000000000000
 develop   |    10 |   5200 | 5020.0000000000000000
 personnel |     5 |   3500 | 3700.0000000000000000
 personnel |     2 |   3900 | 3700.0000000000000000
 sales     |     3 |   4800 | 4866.6666666666666667
 sales     |
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值