一、关键点
1、窗口函数可以分为两类。
一是 将SUM、MAX、MIN等聚合函数用在窗口函数中
二是 RANK、DENSE_RANK等排序用的专用窗口函数
专用窗口函数
- RANK函数
计算排序时,如果存在相同位次的记录,则会跳过之后的位次。
例)有 3 条记录排在第 1 位时:1 位、1 位、1 位、4 位……
- DENSE_RANK函数
同样是计算排序,即使存在相同位次的记录,也不会跳过之后的位次。
例)有 3 条记录排在第 1 位时:1 位、1 位、1 位、2 位……
- ROW_NUMBER函数
赋予唯一的连续位次。
2、原则上,窗口函数只能在SELECT子句中使用。窗口函数OVER 中的ORDER BY 子句并不会影响最终结果的排序。其只是用来决定窗口函数按何种顺序计算。
二、练习
5.1 可以进行移动搜索,得到当前的最大商品价格。
5.2
SELECT product_id
,product_name
,regist_date
,sale_price
,SUM(sale_price) OVER (
partition by regist_date
ORDER BY regist_date ) AS sum_price
FROM product
5.3.1
就不会进行窗口划分,整个表进行直接的排序和计算。
5.3.2
因为order by是最后执行的。