开窗函数(又名:分析函数,窗口函数,OLAP函数):
将数据按照一定的规则分组,统一分析各组的某项情况,每行数据返回一行结果。不论是spark的还是clickhouse的在日常的查询中是一个很常用的功能,特别是他想要解决的问题和group by的很类似,这两种容易引起混淆,本文就简单的描述下开窗函数的简单用法。
数据实例:
SQL操作实例:
1.查询每个班级中学生中年龄最大学生的基本信息。
-- 常用写法
select * from T_Student wehre Age in (select max(Age) from T_Student Group by Class);
-- 改进写法
select * from T_Student wehre Age in (select max(Age) OVER(PARTITION BY Class) from T_Student );
2.查询每个班级中学生的最大年龄差。
--常用写法
select Class ,max(Age)-min(Age) 最大年龄差 from T_Student group by Class
--改进写法
select Class,max(Age) OVER(PARTITION BY Class)-min(Age) OVER(PARTITION BY Class) 最大年龄差 from T_Student
3.查询时要求带出学生所在班级的学生年龄总和。
--常用方法
---------不想写-------
--改进写法
SELECT Name ,Age ,Class,SUM(Age) OVER(PARTITION BY Class) AS WEEKAMT FROM T_Student
4.查询时按照学生姓名排序并带上序号。
--常用写法
------小编不会--------
--改进写法
SELECT Name,ROW_NUMBER()OVER( ORDER BY Name) 序号 FROM T_Student
5.查询时按照班级分组、学生姓名排序并带上序号。
--常用方法
----------望指点---------
--改进方法
SELECT B.Class,B.Name,ROW_NUMBER()OVER(PARTITION BY Class ORDER BY Name DESC) 序号 FROM T_Student B;