1.分组聚合函数
聚合函数主要有求和:sum();最大数:max();最小数:min();平均值:avg();统计数:count()等,在应用此类函数的时候,要么是从全集合来看或者从分组来看的。分组就是我们之前所说的维度,比如在成绩表中,我们需要按科目求出总成绩,最低成绩,最高成绩,平均成绩,以及人数。
select a.subject,
sum (a.score) all_score, -- 总成绩
min (a.score) min_score, -- 最低成绩
max (a.score) max_score, -- 最高成绩
avg (a.score) avg_score, -- 平均成绩
count ( 1 ) stu_cnt -- 人数
from t_score a
group by a.subject;
2.分组排序函数
row_number是用于分组排序的函数,在数据处理上常常会用到,实际工作中我们的TOP%20N;去重,这类场景中此函数很方便的实现我们的需求。
比如我们要按科目分类,对每个人的成绩从高到低排序:
select %20stu_no,
%20subject,
%20score,
%20row_number()%20 over ( partition %20 by %20a.subject%20 order %20 by %20a.score%20 desc )%20rn%20 -- 排序
%20 from %20t_score%20a;
在row_number函数中,partition%20by则是按什么维度分组,如果不写这个则是按全集来分组,order%20by则是按什么排序,desc则表示倒序(从高到低),asc表示升序,默认是升序,可以不写。
比如我们需要求每个科目的前2名学生成绩信息。
select %20stu_no,%20subject,%20score,%20rn
%20 from %20( select %20stu_no,
%20subject,
%20score,
%20row_number()%20 over ( partition %20 by %20a.subject%20 order %20 by %20a.score%20 desc )%20rn%20 -- 排序
%20 from %20t_score%20a)%20t
where %20t.rn%20<=%20 2 ;
更多技术文章请关注公众号:BLT328
