窗口函数
考查知识点:
• 如何用窗口函数解决排名问题、Top N问题、前百分之N问题、累计问题、每组内比较问题、连续问题。
什么是窗口函数
窗口函数也叫作OLAP(Online Analytical Processing,联机分析处理)函数,可以对数据库中的数据进行复杂分析。
窗口函数的通用语法如下:
<窗口函数> over(partition by <用于分组的列名> order by <用于排序的列名>) |
我们看一下这个语法里每部分表示什么。
(1)<窗口函数>的位置可以放两种函数:
一种是专用窗口函数,比如用于排名的函数,比如rank()、dense_rank()、row_number();
另一种是汇总函数,比如sum()、avg()、count()、max()、min()。
(2)<窗口函数>后面的over关键字括号里的内容有两部分:一个是partition by,表示按某列分组;另一个是order by,表示对分组后的结果按某列排序。
(3)因为窗口函数通常是对where或者group by子句处理后的结果进行操作的,所以窗口函数原则上只能写在select子句中。
SQL的运行顺序:
from 1
where 2
group by 3
having 4
select 5
基本查询
开窗查询
order by 6
limit 7
窗口函数可以解决这几类经典问题:排名问题、Top N问题、前百分之N问题、累计问题、每组内比较问题、连续问题。
这些问题在工作中你会经常遇到,
比如,排名问题,对用户搜索关键字按搜索次数排名、对商品按销售量排名。
再如,领导想让你找出每个部门业绩排名前10的员工进行奖励,这其实就是Top N问题。
再如,要分析复购用户有多少,这类问题属于前百分之N的问题。
再如,公司对各月发放的工资累计求和,医院要经常统计累计患者数,这类问题就是累计问题。