欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【DA】-【SQL】-【窗口函数学习】

程序员文章站 2022-05-25 17:05:08
...

0.概述

1.SQL窗口函数作用?

  • 面向各组内排序的业务需求,例如每个部门按业绩排名每个部门排名Top N的员工等。

2.SQL窗口函数定义?

  • 窗口函数又叫OLAP函数(Online Analytical Processing,联机分析处理),虽然不太清楚为什么,但是它的作用是能够实时处理数据库当中的数据。

3.SQL窗口函数的语法?

<窗口函数> over (partition by <用于分组的列> order by <用于排序的列>)。

  • 以第1部分的栗子“每个部门按业绩排名”为例,<用于分组的列>则是部门,<用于排序的列>则是业绩
  • <窗口函数>分为两种:一般聚合函数和专用窗口函数。
  • 聚合函数:sum(), avg(), count(), max(), min();
  • 专用函数:rank(), dense_rank(), row_number(), ntile()。
1)row_number()对于每条记录都给出一个排序序号,如123;
(2)rank()函数对排序列值相同的记录给出相同的排序序号,如122;
(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()排序序号是-张,李,王:123;
rank()排序序号是-张,李,王:112;
dense()排序序号是-张,李,王:113.
按照row_number()冠亚季军各有归属;按照rank()有两位并列冠军,一位亚军;
按照dense_rank()也是两位并列冠军,没有亚军(瞎说一下举个例子而已),只有季军。
(5)ntile()函数则是将数据分区,
比如ntile(1),那么-张,李,王:111;ntile(2),那么-张,李,王:112;
ntile(3),那么-张,李,王:123

备注:窗口函数原则上智只能写在select子句当中

4.SQL窗口函数的应用?

相关标签: SQL DA