当前位置:9992019银河国际 > 网络数据 > 总结出种种人的最高战绩

总结出种种人的最高战绩

文章作者:网络数据 上传时间:2019-10-15

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

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

例如 : 1 张三 100

下边这种景观只适用id 和name是各样对应的,不然查询出来的数目是不准确的。

制止这种状态,能够采纳开窗函数。

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

常用深入分析函数:(最常用的应有是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,第多个参数是 超过记录窗口时的暗许值)

常用开窗函数:
1.为每条数据展示聚合音讯.(聚合函数() over())
2.为每条数据提供分组的聚合函数结出(聚合函数() over(partition by 字段) as 外号) --依照字段分组,分组后举办总结
3.与排行函数一同利用(row number() over(order by 字段) as 小名)

个体掌握正是,开窗函数和聚合函数效率是倒转的。

          两条新闻都会输出。

        要是后续选拔起来的不二等秘书诀,那么是不能够满意供给的。

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

--每一个班级的成就率先的学生
--学生表中国国投息如下
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

 

        使用开窗函数就能够很好的消除这一个难题。

分析:每种人学号一定是例外的,名字恐怕有重名,最大复杂的事态是,种种班最高战绩大概持续一个。

二个学习性职务:每种人有例外次数的实际业绩,总结出每种人的万丈战绩。

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

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

) as t
where t.mm=1

开窗函数能够满意上述难点,同事也足以满意别的难点。例如:求每一种班最高成绩学生的新闻。

over()开窗函数: 在行使聚合函数后,会将多行形成一行,
而开窗函数是将一行成为多行;
同一时候在选拔聚合函数后,要是要出示别的的列必需将列出席到group by中,
而接纳开窗函数后,可以不采纳group by,直接将兼具音讯彰显出来。

           2 张三 90

          查询出来的结果

心得:
rank()跳跃排序,有七个第二名时前面跟着的是第四名
dense_rank() 连续排序,有七个第二名时如故跟着第三名

本文由9992019银河国际发布于网络数据,转载请注明出处:总结出种种人的最高战绩

关键词: