一、窗口函数
窗口函数,即OLAP函数,用于对数据库数据进行实时分析处理。
窗口函数分类:
1.能够作为窗口函数的聚合函数(SUM、AVG、COUNT、MAX、MIN)
2.RANK、DENSE_RANK、ROW_NUMBER 等专用窗口函数
窗口函数的语法
-- []中的内容可以省略
<窗口函数> OVER ([PARTITION BY <列清单>] ORDER BY <排序用列清单>)
PARTITION BY,设定排序的对象范围,在横向上对表进行分组。
ORDER BY,指定按哪一列、何种顺序进行排序,决定纵向排序的规则。
窗口函数中的ORDER BY与SELECT语句末尾的ORDER BY一样,可以通过关键字ASC/DESC来指定升序和降序。省略该关键字时会默认升序排序。
窗口,即范围,是通过PARTITION BY分组后的记录集合。
RANK函数
RANK,用来计算记录排序的函数。
-- 根据不同的商品种类,按照销售单价从低到高的顺序创建排序表
SELECT product_name, product_type, sale_price,
RANK () OVER (PARTITION BY product_type ORDER BY sale_price) AS ranking
FROM Product;
从结果来看,PARTITION BY子句不具备GROUP BY子句的汇总功能。因此,使用RANK函数不会减少原表中记录的行数。
PARTITION BY不是必需的
不指定PARTITION BY,和使用没有GROUP BY的聚合函数时的效果一样。