<窗口函数> over (partition by <用于分组的列> order by <用于排序的列>)。
以第1部分的栗子“每个部门按业绩排名”为例,<用于分组的列>则是部门,<用于排序的列>则是业绩。<窗口函数>分为两种:一般聚合函数和专用窗口函数。聚合函数:sum(), avg(), count(), max(), min();专用函数:rank(), dense_rank(), row_number(), ntile()。 (1)row_number()对于每条记录都给出一个排序序号,如1,2,3; (2)rank()函数对排序列值相同的记录给出相同的排序序号,如1,2,2; (3)dense_rank()和rank()类似,都会给值相同的记录以相同序号,但是区别于rank()的连续分配1,2,2,3,3,3;dense_rank()给出的结果会是1,2,2,4,4,4跳跃序号结果。 (4)举个栗子: 百米赛跑成绩为张三10.00秒,李四10.00秒,王二麻子10.01。 那么按照row_number()排序序号是-张,李,王:1,2,3; rank()排序序号是-张,李,王:1,1,2; dense()排序序号是-张,李,王:1,1,3. 按照row_number()冠亚季军各有归属;按照rank()有两位并列冠军,一位亚军; 按照dense_rank()也是两位并列冠军,没有亚军(瞎说一下举个例子而已),只有季军。 (5)ntile()函数则是将数据分区, 比如ntile(1),那么-张,李,王:1,1,1;ntile(2),那么-张,李,王:1,1,2; ntile(3),那么-张,李,王:1,2,3。备注:窗口函数原则上智只能写在select子句当中。