金沙网址两条音讯都会输出

叁个学习性职分:每一个人有例外次数的实绩,总计出各样人的万丈战表。

本条题材应该依旧相对轻巧,其实就用聚合函数就好了。

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

下面那种景观只适用id 和name是逐1对应的,不然查询出来的多少是不准确的。

例如 : 1 张三 100

           2 张三 90

          查询出来的结果

          两条音信都会输出。

制止那种景况,能够应用开窗函数。

村办驾驭正是,开窗函数和聚合函数成效是相反的。

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

开窗函数能够满足上述难点,同事也得以满意其余标题。举例:求各个班最高成绩学生的音信。

分析:每一种人学号一定是分化的,名字只怕有重名,最大复杂的情景是,每一种班最高战表恐怕持续一个。

        假设持续行使起来的章程,那么是无法满足须求的。

        使用开窗函数就能很好的化解那些主题素材。

–每种班级的成就率先的学员
–学生表中国国投息如下
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()跳跃排序,有多个第二名时前边跟着的是第6名
dense_rank() 接二连三排序,有五个第三名时依旧跟着第二名

over()开窗函数: 在运用聚合函数后,会将多行产生一行,
而开窗函数是将一行成为多行;
同时在利用聚合函数后,假设要展现别的的列必须将列参加到group by中,
而接纳开窗函数后,能够不行使group by,直接将具有音讯体现出来。

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

常用开窗函数:
1.为每条数据体现聚合音信.(聚合函数() over())
二.为每条数据提供分组的聚合函数结出(聚合函数() over(partition by 字段) as
外号) –遵照字段分组,分组后开始展览估测计算
3.与排名函数一齐利用(row number() over(order by 字段) as 外号)

常用分析函数:(最常用的应有是壹.二.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,第5个参数是
高出记录窗口时的私下认可值)

相关文章