/*
![dd7f235830b688178e603004a35aa544.png](https://i-blog.csdnimg.cn/blog_migrate/a1ff2019b7b51b6235d4e1801b7e5b08.jpeg)
100万行的一个例子
IF OBJECT_ID(N'dbo.t') IS NOT NULL
DROP TABLE dbo.t;
GO
CREATE TABLE dbo.t
(
i BIGINT IDENTITY(1, 1) PRIMARY KEY,
d MONEY
);
INSERT t
(
d
)
SELECT TOP 1000000
ROUND(10000 * RAND(CHECKSUM(NEWID())), 2)
FROM sys.all_objects AS a
CROSS JOIN sys.all_objects;
go
WITH cte_a
AS
( SELECT a.i,
a.d,NTILE(100000) OVER (ORDER BY i) AS group_no FROM dbo.t AS a
)
SELECT a.i,
a.d,
a.group_no,
SUM(d) OVER (ORDER BY i) AS 全局内至本行累计和,
SUM(d) OVER (PARTITION BY a.group_no ORDER BY i) AS 组内至本行累计和,
SUM(d) OVER (PARTITION BY a.group_no) AS 组内和,
AVG(1.0*d) OVER (ORDER BY i) AS 全局内至本行移动平均,
AVG(1.0*d) OVER (PARTITION BY a.group_no ORDER BY i) AS 组内至本行移动平均,
AVG(1.0*d) OVER (PARTITION BY a.group_no) AS 组内平均值
FROM cte_a AS a
ORDER BY i
![deeff0f412cd6a1c3409f1b469b7c0ef.png](https://i-blog.csdnimg.cn/blog_migrate/43c80e27a89290f3ffe98e086a1695bc.jpeg)