<窗口函数> over (partition by <用于分组的列名>
order by <用于排序的列名>)
因为窗口函数是对where或者group by子句处理后的结果进行操作,所以窗口函数原则上只
能写在select子句中。
<窗口函数>的位置,可以放以下两种函数:
1) 专用窗口函数,比如rank, dense_rank, row_number等
2) 聚合函数,如sum. avg, count, max, min等
4.0 注意点
Order By子句对于诸如Row_Number(),Lead(),LAG()等函数是必须的,因为如果数据
无序,这些函数的结果就没有任何意义。因此如果有了Order By子句,则Count(),Min()等
计算出来的结果就没有任何意义。
Row_Number()是没有重复的一种排序,即使对于两行相同的数据,也会根据查询到的顺序进行排名;
RANK函数,与Row_Number不同,Rank函数中如果出现了相同的值,不会像Row_Number
那样叠加计数,而是同样的值计数一样
5.0例子
举个简单的例子 : 我需要知道用户根据工厂分组之后 创建时间的排名
SELECT *,
Row_Number() OVER(partition by site ORDER BY create_time ) 排名
FROM sys_user
需要赛选出 一定排名的
SELECT *
FROM (
SELECT *, Row_Number() OVER(partition by site ORDER BY create_time ) 排名
FROM sys_user
) as a
WHERE a.排名<=3