MSSQL 的OVER()函数
来源:互联网 发布:百度云计算阳泉中心 编辑:程序博客网 时间:2024/06/05 07:16
1. OVER子句用于为行为定义一个窗口(即给纪录多添加特定一列),以便进行特定的运算。
可以简单地认为是运算将要操作的一个行的集合。
聚合函数和排序函数都是可以支持OVER子句的运算类型。
由于OVER子句为这些函数提供了一个行的窗口,所以这些函数也称之为开窗函数。
如果over()里面没有子句, over子句为该次查询返回的所有行.
over子句提供partition by进行分区.
其实就是把可操作的数据进行分组, 并匹配出符合分组参数的行集合.
2. 排序函数, over子句 与 partition by, order by连用可以生成特殊排序
eg:
--建表
CREATE TABLE [dbo].[test](
[id] [int] NULL,
[col06] [int] NULL,
) ON [PRIMARY]
GO
--测试数据
insert into test (id, col06) values (1, 1);
insert into test (id, col06) values (2, 1);
insert into test (id, col06) values (3, 1);
insert into test (id, col06) values (4, 6);
insert into test (id, col06) values (5, 6);
insert into test (id, col06) values (6, 6);
insert into test (id, col06) values (7, 9);
insert into test (id, col06) values (8, 9);
insert into test (id, col06) values (9, 9);
insert into test (id, col06) values (10, 12);
insert into test (id, col06) values (11, 12);
insert into test (id, col06) values (12, 12);
select * from test
-- 聚合函数 COUNT(), AVG() 等
-- 排序函数 row_number() 等
SELECT id, col06,
COUNT(id) OVER() AS countid, --总纪录数
MIN(id) OVER() AS minid, --最小ID号
MAX(id) OVER() AS maxid, --最大ID号
AVG(id) OVER() AS avgid, --ID平均
SUM(id) OVER() AS sumid, --ID之和
AVG(id) OVER(PARTITION BY col06) AS col06avgid, --按col06分区, 求ID平均
SUM(id) OVER(PARTITION BY col06) AS col06totalid --按col06分区, 求ID和
FROM test
order by id;
--SQL2000:
SELECT id, col06,
(SELECT COUNT(id) from test) AS countid,
(SELECT MIN(id) from test) AS minid,
(SELECT SUM(id) from test) AS maxid,
(SELECT MAX(id) from test) AS sumid,
(SELECT AVG(id) from test) AS avgid,
(SELECT AVG(id) from test where id=T.id) as col06avgid,
(SELECT SUM(id) from test where id=T.id) AS col06totalid
FROM test AS T
ORDER BY id;
SELECT id, col06,
row_number() over(order by id desc) AS num, --与排序函数一起使用, 根据ID降序排序
row_number() over(partition by col06 order by id desc) AS rnum --与排序函数一起使用, 按col06分组,然后根据ID降序排序
FROM test
ORDER BY id;
可以简单地认为是运算将要操作的一个行的集合。
聚合函数和排序函数都是可以支持OVER子句的运算类型。
由于OVER子句为这些函数提供了一个行的窗口,所以这些函数也称之为开窗函数。
如果over()里面没有子句, over子句为该次查询返回的所有行.
over子句提供partition by进行分区.
其实就是把可操作的数据进行分组, 并匹配出符合分组参数的行集合.
2. 排序函数, over子句 与 partition by, order by连用可以生成特殊排序
eg:
--建表
CREATE TABLE [dbo].[test](
[id] [int] NULL,
[col06] [int] NULL,
) ON [PRIMARY]
GO
--测试数据
insert into test (id, col06) values (1, 1);
insert into test (id, col06) values (2, 1);
insert into test (id, col06) values (3, 1);
insert into test (id, col06) values (4, 6);
insert into test (id, col06) values (5, 6);
insert into test (id, col06) values (6, 6);
insert into test (id, col06) values (7, 9);
insert into test (id, col06) values (8, 9);
insert into test (id, col06) values (9, 9);
insert into test (id, col06) values (10, 12);
insert into test (id, col06) values (11, 12);
insert into test (id, col06) values (12, 12);
select * from test
-- 聚合函数 COUNT(), AVG() 等
-- 排序函数 row_number() 等
SELECT id, col06,
COUNT(id) OVER() AS countid, --总纪录数
MIN(id) OVER() AS minid, --最小ID号
MAX(id) OVER() AS maxid, --最大ID号
AVG(id) OVER() AS avgid, --ID平均
SUM(id) OVER() AS sumid, --ID之和
AVG(id) OVER(PARTITION BY col06) AS col06avgid, --按col06分区, 求ID平均
SUM(id) OVER(PARTITION BY col06) AS col06totalid --按col06分区, 求ID和
FROM test
order by id;
--SQL2000:
SELECT id, col06,
(SELECT COUNT(id) from test) AS countid,
(SELECT MIN(id) from test) AS minid,
(SELECT SUM(id) from test) AS maxid,
(SELECT MAX(id) from test) AS sumid,
(SELECT AVG(id) from test) AS avgid,
(SELECT AVG(id) from test where id=T.id) as col06avgid,
(SELECT SUM(id) from test where id=T.id) AS col06totalid
FROM test AS T
ORDER BY id;
SELECT id, col06,
row_number() over(order by id desc) AS num, --与排序函数一起使用, 根据ID降序排序
row_number() over(partition by col06 order by id desc) AS rnum --与排序函数一起使用, 按col06分组,然后根据ID降序排序
FROM test
ORDER BY id;
0 0
- MSSQL 的OVER()函数
- mssql中over()的用法
- MSSQL 基础知识 开窗函数over(),orcl分析函数over()
- MSSQL OVER
- Oracle的over函数
- rank() over,dense_rank() over,row_number() over函数的区别
- MSSQL的datediff函数
- MSSQL的datediff函数
- MSSQL 的QUOTENAME函数
- [MSSQL]SQL SERVER 2005-OVER (PARTITION BY…)的用法
- row_number()over函数的使用
- row_number()over函数的使用
- row_number() over函数的使用
- row_number()over函数的使用
- Oracle的over() 函数使用
- oracle的over函数使用
- oracle的分析函数 over()
- Oracle的分析函数over(...)
- android学习笔记之Activity生命周期详解
- 重定向和其他请求变化
- 【树形dp】hdu 2415 Bribing FIPA
- 快速了解Scala技术栈
- Web Navigation(1028)
- MSSQL 的OVER()函数
- PlistBuddy用法举例
- iOS培训日志连载一
- Nginx启动停止脚本
- 安装VMware Tool
- 一文教你看懂大数据的技术生态圈:Hadoop,hive,spark
- 2012年5月SAT香港真题解析
- 基于caffe的特征可视化
- 女生穿衣打扮有讲究