开窗函数range_sql 开窗函数

开窗函数range_sql 开窗函数数据库面试题(一)开窗函数OVER(PARTITION BY)!!!!!!!!唯有美女,才有动力&#x

数据库面试题(一)——开窗函数OVER(PARTITION BY)   !!!!!!!!唯有美女,才有动力!!!!!!!!   
开窗函数range_sql 开窗函数   目录   !!!!!!!!唯有美女,才有动力!!!!!!!!   一、开窗函数的概念:   二、开窗函数的语法:   三、开窗函数和聚合函数的区别:   四、排序开窗函数row_number()、rank()、dense_rank()、ntile()的区别:   1、首先创建表 students_grades:   2、插入测试数据:   3、查询语句如下:   4、查询结果如下:   五、聚合开窗函数:   1、sum(salary) over(partition by city)   2、sum(salary) over(order by name)   3、sum(salary) over(partition by city order by name)   4、其他类似sum()的聚合函数:   5、first_value(salary)和last_value(salary)   6、lead(salary,1,0)和lag(salary,2,9)   一、开窗函数的概念:   开窗函数是计算基于组的某种聚合值,但是它不像普通聚合函数那样每组只返回一个值,开窗函数可以为每组返回多个值,因为开窗函数所执行聚合计算的行集组是窗口。在ISO SQL规定了这样的函数为开窗函数,在 Oracle中则被称为分析函数,而在DB2中则被称为OLAP函数。   有两类:一类是排序开窗函数,一类是聚合开窗函数。   二、开窗函数的语法:   函数名(列名) over(partition by 列名1 order by 列名2 ) ,括号中的两个关键词partition by 和order by 可以只出现一个。over() 前面是一个函数,如果是聚合函数,那么order by 不能一起使用。   三、开窗函数和聚合函数的区别:   (1)SQL 标准允许将所有聚合函数用作开窗函数,用OVER 关键字区分开窗函数和聚合函数。   (2)聚合函数每组只返回一个值,开窗函数每组可返回多个值。   注:常见主流数据库MSSQLServer、Oracle、DB2等都支持开窗函数,MySQL8.0支持开窗函数,MySQL8.0之前的版本不支持。   四、排序开窗函数row_number()、rank()、dense_rank()、ntile()的区别:   看不明白文字描述可以看后面的实操例子: row_number() over():对相等的值不进行区分,相等的值对应的排名相同,序号从1到n连续。rank() over():相等的值排名相同,但若有相等的值,则序号从1到n不连续。如果有两个人都排在第3名,则没有第4名。dense_rank() over():对相等的值排名相同,但序号从1到n连续。如果有两个人都排在第一名,则排在第2名(假设仅有1个第二名)的人是第3个人。ntile( n ) over():可以看作是把有序的数据集合平均分配到指定的数量n的桶中,将桶号分配给每一行,排序对应的数字为桶号。如果不能平均分配,则较小桶号的桶分配额外的行,并且各个桶中能放的数据条数最多相差1。   实操举例:   1、首先创建表 students_grades:   2、插入测试数据:   3、查询语句如下:   4、查询结果如下:   
开窗函数range_sql 开窗函数   五、聚合开窗函数:   (测试数据在本节最后提供)   1、sum(salary) over(partition by city)   结果如图:   
开窗函数range_sql 开窗函数   2、sum(salary) over(order by name)   结果如图:   
开窗函数range_sql 开窗函数   3、sum(salary) over(partition by city order by name)   结果如图:   
开窗函数range_sql 开窗函数   每个人的工资按照每个月累计统计数据:   
开窗函数range_sql 开窗函数   
开窗函数range_sql 开窗函数4、其他类似sum()的聚合函数:   count() over(partition by … order by …):求分组后的总数。   max() over(partition by … order by …):求分组后的最大值。   min() over(partition by … order by …):求分组后的最小值。   avg() over(partition by … order by …):求分组后的平均值。   5、first_value(salary)和last_value(salary)   结果分别如下图:   
开窗函数range_sql 开窗函数   
开窗函数range_sql 开窗函数   6、lead(salary,1,0)和lag(salary,2,9)   结果如下图:   
开窗函数range_sql 开窗函数   
开窗函数range_sql 开窗函数   测试数据:

2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/63891.html

(0)
上一篇 2024年 8月 27日
下一篇 2024年 8月 27日

相关推荐

关注微信