内容简介:窗口函数语法:
窗口函数语法:
Function() OVER ([PARTITION BY <...>] [ORDER BY <...>] [Window Specification])
PARTITION BY
定义窗口分区,控制哪些数据行和当前数据行在同一个分区。
ORDER BY
定义窗口排序,控制分区内的 排序 方式,决定了当前行在分内的位置。
Window Specification 定义窗口帧,根据当前行的位置声明哪些行将包含在帧中。 更多
表、数据集、分区、帧和行的关系如下图所示:
窗口函数可以分为三类:
- 聚合函数,通常的聚合函数,如
SUM
和MAX
等。 - 排序函数,排序数据函数,如
RANK
和ROW_NUMBER
等。 - 分析函数,统计和对比函数,如
LEAD
、LAG
和FIRST_VALUE
等。
样例数据:
name | department | salary |
---|---|---|
Tom | A | 5500 |
Jerry | A | 5000 |
Lily | B | 7000 |
Lucy | A | 8000 |
Tony | B | 3800 |
Micheal | B | 4000 |
聚合函数
需求:计算每个雇员所在部门的总工资额。
查询 SQL:
SELECT name, department, salary, SUM(salary) OVER (PARTITION BY department) AS sum FROM employee
查询结果:
name | department | salary | sum |
---|---|---|---|
Tom | A | 5500 | 18500 |
Jerry | A | 5000 | 18500 |
Lily | B | 7000 | 14800 |
Lucy | A | 8000 | 18500 |
Tony | B | 3800 | 14800 |
Micheal | B | 4000 | 14800 |
排序函数
需求:计算每个雇员所在部门的工资排名。
查询 SQL:
SELECT name, department, salary, RANK() OVER (PARTITION BY department SORT BY salary DESC) AS rank FROM employee
查询结果:
name | department | salary | rank |
---|---|---|---|
Tom | A | 5500 | 2 |
Jerry | A | 5000 | 3 |
Lily | B | 7000 | 1 |
Lucy | A | 8000 | 1 |
Tony | B | 3800 | 3 |
Micheal | B | 4000 | 2 |
分析函数
需求:计算每个雇员所在部门的最高工资。
查询 SQL:
SELECT name, department, salary, FIRST_VALUE(salary) OVER (PARTITION BY department SORT BY salary DESC) AS first FROM employee
查询结果:
name | department | salary | rank |
---|---|---|---|
Tom | A | 5500 | 8000 |
Jerry | A | 5000 | 8000 |
Lily | B | 7000 | 7000 |
Lucy | A | 8000 | 8000 |
Tony | B | 3800 | 7000 |
Micheal | B | 4000 | 7000 |
参考
- Structured Query Language/Window functions
- LanguageManual WindowingAndAnalytics
- Introducing Window Functions in Spark SQL
- Hive分析窗口函数(一) SUM,AVG,MIN,MAX
- Hive分析窗口函数(二) NTILE,ROW NUMBER,RANK,DENSE RANK
- Hive分析窗口函数(三) CUME DIST,PERCENT RANK
- Hive分析窗口函数(四) LAG,LEAD,FIRST VALUE,LAST VALUE
- Hive分析窗口函数(五) GROUPING SETS,GROUPING__ID,CUBE,ROLLUP
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- Go 学习笔记之学习函数式编程前不要忘了函数基础
- python学习日记:day16-------内置函数与匿名函数
- Python函数的学习
- GO-函数学习
- 学习函数式编程 Monad
- 如何开始函数编程的学习?
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。