大发体育娱乐在线-大发体育娱乐官方网站-大发体育娱乐登录网址
做最好的网站

开窗函数

来源:http://www.dfwstonefabricators.com 作者:数据库 人气:71 发布时间:2019-09-19
摘要:一个学习性职务:每个人有两样次数的战绩,总结出种种人的最高战绩。 以此主题材料应该依然相对简便易行,其实就用聚合函数就好了。 select id,name,max(score) from Student group by id,name

一个学习性职务:每个人有两样次数的战绩,总结出种种人的最高战绩。

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

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

上面这种情形只适用id 和name是各类对应的,不然查询出来的数量是不准确的。

例如 : 1 张三 100

           2 张三 90

          查询出来的结果

          两条音讯都会输出。

防止这种情景,可以运用开窗函数。

个体理解就是,开窗函数和聚合函数成效是倒转的。

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

开窗函数能够满意上述难题,同事也足以满意别的难点。譬喻:求各类班最高战绩学生的消息。

深入分析:各类人学号一定是见仁见智的,名字恐怕有重名,最大复杂的景观是,各样班最高战绩大概持续叁个。

        要是持续利用起来的法子,那么是不能满意须求的。

        使用开窗函数就能够很好的解决这几个难题。

--各类班级的大成率先的学员
--学生表中国国投息如下
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 有多个参数,第一个参数是列名,第4个参数是偏移的offset,第多少个参数是 高出记录窗口时的暗中认可值)

本文由大发体育娱乐在线发布于数据库,转载请注明出处:开窗函数

关键词:

上一篇:最近三天

下一篇:sqlserver 拆分

频道精选

最火资讯