基本每次面试BI候选人的时候,为了了解候选人的SQL基本功底,每次都会问到窗口函数,因为这个函数太好用了。下面就来简单介绍下SQL窗口函数的用法用途。
窗口函数作用于一个数据行集合。窗口是标准的SQL术语,用来描述SQL语句内OVER子句划定的内容,这个内容就是窗口函数的作用域。而在OVER子句中,定义了窗口所覆盖的与当前行相关的数据行集、行的排序及其他的相关元素。
标准SQL对窗口函数的第一次支持是在SQL:1999的扩展文档中,当时,它们称为“OLAP”函数。从那以后,每次标准版本的修订都会增强对窗口函数的支持,直到现在的SQL:2003、SQL:2008、SQL:2011。最新的SQL标准版本,已经有了非常丰富和全面的窗口函数,显示出标准委员会对这一概念的坚定,以及从更多窗口函数和更多功能两个方面持续增强支持标准。
1. 排名函数
row_number/rank/dense_rank
窗口函数当然是这篇文章的重点了。窗口函数中,排名函数又是最常用的。窗口排序主要是指非全表排序,需要在某个维度下进行排序。。例如说现在想看各个department内部收入最多的人,这时候不能全表order by了,该怎么取?
select
*,
row_number() over ( partition by department order by revenue desc ) as row_number_result,
rank() over ( partition by department order by revenue desc) as rank_result,
dense_rank() over (partition b
版权声明:本文为samuelzhanmk原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。