开窗函数简介
来源:互联网 发布:windows7编程 编辑:程序博客网 时间:2024/04/29 13:31
与聚合函数一样,开窗函数也是对行集组进行聚合计算,但是普通聚合函数每组只能返回一个值,而开窗函数可以每组返回多个值。
实验一
比如我们想查询每个工资小于5000元的员工信息(城市以及年龄),并且在每行中都显示所有工资小于5000元的员工个数,执行下面的SQL语句
select t.fcity,t.fage,count(*) from person t where t.fsalary<5000
这个语句显然是错误的,因为count()是聚合函数,然后fname和fage字段没有包含分组里面。
实验二
那么,这样写呢?
select t.fcity,t.fage,count(*) from person t where t.fsalary<5000 group by t.fcity,t.fage
查询结果
这与我们每行中都显示所有工资小于5000元的员工个数这个条件是不符合的,那么应该怎么写呢?
实验三
select t.fcity, t.fage, (select count(*) from person f where f.fsalary < 5000) from person t where t.fsalary < 5000
查询结果:
这次的查询结果和我们想要的结果一样了,但是这样写多了一个子查询,非常麻烦。使用开窗函数可以大大简化实现,下面看一下开窗函数要实现这个效果怎么写
实验四
select t.fcity, t.fage, count(*) over() from person t where t.fsalary < 5000
看下执行效果:
可以看到这个SQL语句与我们第一个实验不同的是我们在count(*)后面加了一个over关键字。
开窗函数的调用格式为:
函数名(列)over(选项)
over关键字表示把函数当成开窗函数而不是聚合函数,SQL标准允许将所有聚合函数用做开窗函数,使用over关键字来区分这两种用法。
在上面的例子中,开窗函数count(*) over()对于查询结果的每一行都返回所有符合条件的行的条数,over关键字后的括号中还经常添加选项用以改变进行聚合运算的窗口范围(后面博客会持续更新),如果over关键字后的括号中选项为空,则开窗函数会对结果集中的所有行进行聚合运算。当然,不只是count(*) over,max(fage) over(),min(fage) over()都可以。
3 0
- 开窗函数简介
- SQL SERVER 开窗函数简介
- SQL SERVER 开窗函数简介
- 开窗函数
- 开窗函数
- 开窗函数
- SQL--浅析,开窗函数,聚合开窗函数,排序开窗函数。
- 索引、分页、开窗函数
- sql over开窗函数
- sql over开窗函数
- Oracle开窗函数
- sql over开窗函数
- over 开窗函数使用说明
- sql over开窗函数
- oracle开窗函数
- SQL Server - 开窗函数
- oracle开窗函数over()
- 数据库中的开窗函数
- 移动端点击事件延迟300毫秒
- UICollectionView的简单介绍
- 3.You need to extract details of those products in the SALES table where the PROD_ID column contains
- 数据访问的跨域解决方案:Jsonp
- CentOs安装Python3
- 开窗函数简介
- Java web开发环境搭建历险记
- 网易彩票项目总结
- 莫比乌斯反演
- 极客学院视频免费看
- Java集合:图
- CAA 控制台窗口的输出
- VS使用TIPS
- 情感分析资源