MSSQL 的OVER()函数

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;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: MySQL中的LEAD函数和OVER函数是用于窗口函数函数。 LEAD函数用于获取当前行后面的指定行数的数据,可以用于计算行与行之间的差值或比率等。 OVER函数用于计算窗口函数的结果,可以用于计算分组、排序、排名等操作。 ### 回答2: MySQL中的LEAD和OVER函数都是窗口函数(Window Function),用于对结果集进行分组、排序和排名等操作。下面分别对LEAD和OVER函数进行介绍: 1. LEAD函数 LEAD函数用于获取当前行之后的指定行数的数据。其语法为: LEAD(expr, offset [, default]) OVER (partition_clause ORDER BY order_list) 其中,expr表示要获取的列或表达式,offset表示偏移量,即获取当前行之后的第几行数据,default表示如果偏移量超出结果集范围时返回的默认值,可以省略。partition_clause和order_list用于指定分组和排序,可以省略。LEAD函数的返回结果为一个包含指定行数数据的列表。 例如,要获取当前行后面第2行的数据,可以使用以下SQL语句: SELECT id, name, LEAD(name, 2) OVER (ORDER BY id) AS next_name FROM student; 上述SQL语句可以获取student表中每行记录的id、name和后面第2行的name值,并将结果保存在next_name列中。 2. OVER函数 OVER函数用于对结果集进行分组、排序和排名等操作。其语法为: aggregate_function(col) OVER (partition_clause ORDER BY order_list) 其中,aggregate_function表示聚合函数,col表示要进行聚合的列,partition_clause和order_list用于指定分组和排序,可以省略。OVER函数的返回结果为一个新的结果集,其中包含筛选后的数据。 例如,要对student表中的成绩进行排名操作,可以使用以下SQL语句: SELECT id, name, score, RANK() OVER (ORDER BY score DESC) AS rank FROM student; 上述SQL语句可以获取student表中每行记录的id、name、score和排名,并将结果保存在rank列中。 总结: LEAD和OVER函数都是MySQL中的窗口函数,用于对结果集进行分组、排序和排名等操作。LEAD函数用于获取当前行之后的指定行数的数据,返回一个包含指定行数数据的列表;OVER函数用于对结果集进行分组、排序和排名等操作,返回一个新的结果集。两个函数都可以通过partition_clause和order_list参数进行分组和排序操作。 ### 回答3: MySQL中的LEAD函数和OVER函数都是窗口函数,它们用来实现在查询操作中对某一列数据进行排序等复杂操作。 首先,LEAD函数的作用是获取当前行后面第N行的数据,只要给出偏移量N即可。例如,LEAD(column, 1)表示获取当前行下一行的column列值。同时,LEAD函数还可以设置默认值,以防止获取数据时出现空值。LEAD函数的基本语法为: ```mysql LEAD(column, N [, default]) OVER (PARTITION BY partition_expression ORDER BY sort_expression [ASC|DESC]) ``` 其中,column表示要获取数据的列,N表示要偏移的行数,default表示默认值,partition_expression则表示分区表达式,sort_expression表示排序方式。 其次,OVER函数可以应用于各种窗口函数,用来定义窗口函数何时开始和结束操作。实际上,OVER函数也是用来定义查询中的分组、排序、聚合等操作的方式。OVER函数的基本语法如下: ```mysql SELECT column, window_function OVER ( [PARTITION BY partition_expression, ... ] [ORDER BY sort_expression [ASC|DESC], ... ] [ROWS | RANGE N PRECEDING | FOLLOWING] ) FROM table; ``` 其中,partition_expression和sort_expression的含义与LEAD函数的类似,ROWS | RANGE N PRECEDING | FOLLOWING则表示窗口的类型。 总的来说,LEAD函数和OVER函数都是非常有用的窗口函数,它们让数据的处理更加方便快捷。在实际应用中,我们可以结合其他查询操作,灵活使用这两个函数,以实现各种需要的数据操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值