开窗函数

文章作者:特马王中王开奖结果 上传时间:2019-10-16

一个学习性任务:每种人有例外交部次官数的大成,总括出各个人的万丈战绩。

以此标题应当依然相对简便易行,其实就用聚合函数就好了。

select id,name,max(score) from Student group by id,name order by name

上面这种景观只适用id 和name是各样对应的,不然查询出来的数量是不科学的。

例如 : 1 张三 100

           2 张三 90

          查询出来的结果

          两条音信都会输出。

防止这种意况,能够应用开窗函数。

个人驾驭就是,开窗函数和聚合函数成效是倒转的。

聚合函数,将多行数据统10%一行数据;而开窗函数则是将一行数据拆分成多行。

开窗函数能够餍足上述难题,同事也得以满意其余问题。比方:求各种班最高成绩学生的信息。

浅析:各种人学号一定是见仁见智的,名字恐怕有重名,最大复杂的情状是,各种班最高战表可能不唯有叁个。

        纵然延续行使起来的艺术,那么是无法满足供给的。

        使用开窗函数就能够很好的缓慢解决那么些难点。

--每种班级的成就率先的学生
--学生表中音讯如下
a 1 80
b 1 78
c 1 95
d 2 74
e 2 92
f 3 99
g 3 99
h 3 45
i 3 55
j 3 78

询问结果如下:
c 1 95 1
e 2 92 1
f 3 99 1
g 3 99 1

SQL查询语句如下:
select *
from
(
select name,class,s,rank()over(partition by class order by s desc) mm
from t2

) as t
where t.mm=1

 

心得:
rank()跳跃排序,有七个第二名时前边跟着的是第四名
dense_rank() 三翻五次排序,有五个第二名时还是跟着第三名

over()开窗函数: 在应用聚合函数后,会将多行形成一行,
而开窗函数是将一行成为多行;
而且在使用聚合函数后,假设要来得其余的列必得将列加入到group by中,
而使用开窗函数后,能够不应用group by,直接将具有信息体现出来。

开窗函数适用于在每一行的末梢一列增加聚合函数的结果。

常用开窗函数:
1.为每条数据呈现聚合消息.(聚合函数() over())
2.为每条数据提供分组的聚合函数结果(聚合函数() over(partition by 字段) as 外号) --依照字段分组,分组后开展总括
3.与排行函数一齐利用(row number() over(order by 字段) as 小名)

常用解析函数:(最常用的应有是1.2.3 的排序)
1、row_number() over(partition by ... order by ...)
2、rank() over(partition by ... order by ...)
3、dense_rank() over(partition by ... order by ...)
4、count() over(partition by ... order by ...)
5、max() over(partition by ... order by ...)
6、min() over(partition by ... order by ...)
7、sum() over(partition by ... order by ...)
8、avg() over(partition by ... order by ...)
9、first_value() over(partition by ... order by ...)
10、last_value() over(partition by ... order by ...)
11、lag() over(partition by ... order by ...)
12、lead() over(partition by ... order by ...)
lag 和lead 能够获取结果集中,按一定排序所排列的脚下行的前后相邻若干offset 的某些行的某部列(不用结果集的自关系);
lag ,lead 分别是前进,向后;
lag 和lead 有八个参数,第二个参数是列名,第一个参数是偏移的offset,第多个参数是 超过记录窗口时的暗许值)

本文由王中王鉄算盘开奖结果发布于特马王中王开奖结果,转载请注明出处:开窗函数

关键词: