SQL进阶-开窗函数() over(partition by) 开窗函数在业务数据提取中经常会用到,例如每个分类的topN,每个分类的平均等等,使用开窗函数,可以有效的使用开窗函数提升Sql的运行效率。 开窗函数分为两种,分别是排序性开窗 和 聚合性开窗 函数的基本语法 开窗函数() OVER(partition by 列名 order by列名) 。partition: 需要分区的列(可不使用)order bye: 对分区内排序 排序开窗函数 使用方法函数含义row_number() over(partition by col1 order by col2)相等的值对应的排名相同,序号从1到n连续。rank() over(partition by col1 order by col2)但若有并列的名称,会占用下一名次的,则序号从1到n不连续。如果有两个人都排在第3名,则没有第4名dense_rank() over(partition by col1 order by col2)但若有并列的名称,不会占用下一名次的,则序号从1到n连续。如果有两个人都排在第3名,则下一名还是第4名ntile( n ) over(partition by col1 order by col2)将每个分区内排序后的结果均分成N个桶,排序对应的数字为桶号。如果不能平均分配,则较小桶号的桶分配额外的行,并且各个桶中能放的数据条数最多相差1 实操案例 假如我们有一个表格,其中有城市(city),价格 (price),等一系列数据:
返回的数据表:
TOP N 假如我们要选出每个城市的top2的价格,我们可以加一层子查询,再用where rank/dens_rank来筛选数据:
聚合开窗函数 SQL 标准允许将所有聚合函数用作开窗函数:max()、min() 、sum() 、avg() 、first_value() 、last_value() 、lag() 、lead()….相比排序开窗返回table一列的数,聚合开窗后,只返回一个值 举个例子,平均和移动平均
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/56316.html