什么叫窗口函数

[复制链接]
查看11 | 回复1 | 2006-10-17 22:40:23 | 显示全部楼层 |阅读模式
使用窗口函数,您可以通过计算每行周围窗口上的集合值来分析数据。结果集会返回表示一组行的摘要值。您可以使用窗口函数计算一家公司在一段指定时间内的销售数据的移动平均值。 除 LIST 以外的任何集合函数都可以与窗口函数联合使用。示例 下面的示例显示了一个窗口函数。查询返回一个结果集,该结果集按部门划分数据,然后提供员工薪水的累计汇总(从在公司的时间最长的员工开始)。结果集只包括居住在加利福尼亚、犹他州、纽约或亚利桑那州的那些雇员。Sum Salary 列提供了雇员薪水的累计总额。 SELECT dept_id, emp_lname, start_date, salary,SUM(salary) OVER (PARTITION BY dept_idORDER BY start_dateRANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS "Sum_Salary"FROM employeeWHERE state IN ('CA', 'UT', 'NY', 'AZ') AND dept_id IN ('100', '200')ORDER BY dept_id, start_date;下面的表是查询的结果集。结果集按部门划分。 对于部门 100,来自加利福尼亚、犹他州、纽约或亚利桑那州的雇员的薪水累计总额是 $434,091.69,而部门 200 的雇员的薪水累计总额是 $250,200.00。
回复

使用道具 举报

千问 | 2006-10-17 22:40:23 | 显示全部楼层
通过举例,快速理解窗口函数。2.1 举例1)创建表 user,表 user 的数据如下mysql>select*fromuser;+‐‐‐‐+‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+|id|name|address|createtime|+‐‐‐‐+‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+|1|aa|cun|2020‐6‐100:00:00||2|bb|cun|2020‐6‐100:00:00||3|bb|shi|2020‐6‐101:00:00||4|bb|shi|2020‐6‐101:00:00||5|cc|cun|2020‐6‐101:00:00||6|tt|cun|2020‐6‐301:00:00||7|eee|cun|2020‐6‐401:00:00||8|eee|cun|2020‐6‐401:00:00||9|xx|shen|2020‐6‐201:00:00|+‐‐‐‐+‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+9rowsinset(0.00sec)2)窗口函数的使用SELECTcreatetime,row_number()over(orderbycreatetime)AScrFROM user ;+‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+‐‐‐‐+|createtime|ll|+‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+‐‐‐‐+|2020‐6‐100:00:00|1||2020‐6‐100:00:00|2||2020‐6‐101:00:00|3||2020‐6‐101:00:00|4||2020‐6‐101:00:00|5||2020‐6‐201:00:00|6||2020‐6‐301:00:00|7||2020‐6‐401:00:00|8|| 2020‐6‐4 01:00:00 | 9 | +‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+‐‐‐‐+9rowsinset(0.00sec)row_number() over(order by createtime) as cr 这部分为窗口函数。over(order by createtime)为窗口规范,函数 row_number() 即对窗口的数据进行编号。所以上述 sql 的意思为:先对 createtime 进行排序,然后对每行数据进行编号。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行