窗口函数 SELECT - OVER Clause (Transact-SQL)
https://docs.microsoft.com/en-us/sql/t-sql/queries/select-over-clause-transact-sql
Determines the partitioning and ordering of a rowset before the associated window function is applied.
That is, the OVER clause defines a window or user-specified set of rows within a query result set.
A window function then computes a value for each row in the window.
You can use the OVER clause with functions to compute aggregated values such as moving averages, cumulative累积的 aggregates, running totals, or a top N per group results.
分组
PARTITION BY
Divides the query result set into partitions.
The window function is applied to each partition separately and computation restarts for each partition.
根据什么进行分组
alue_expression
Specifies the column by which the rowset is partitioned.
value_expression can only refer to columns made available by the FROM clause.
value_expression cannot refer to expressions or aliases in the select list.
value_expression can be a column expression, scalar subquery, scalar function, or user-defined variable.
<ORDER BY clause>
Defines the logical order of the rows within each partition of the
result set.
That is, it specifies the logical order in which the window functioncalculation is performed.
order_by_expression
Specifies a column or expression on which to sort.
order_by_expression can only refer to columns made available by the FROM clause.
An integer cannot be specified to represent a column name or alias.
sql server 2012以上的版本才支持
WITH temp2 AS ( SELECT Id , [number] , ROW_NUMBER() OVER ( ORDER BY ( SELECT 1 )) AS SNO FROM dbo.TestPartition ) SELECT temp2.Id , temp2.number , SUM(number) OVER ( PARTITION BY temp2.Id ORDER BY temp2.SNO ) AS 'number 累计值' FROM temp2
sql server 2008以及以下的版本,使用下面的
/* SQL Server 2005 以及 2008 做法 1.先分区,并编号*/ ; WITH cte AS ( SELECT Id , number , ROW_NUMBER() OVER ( PARTITION BY Id ORDER BY Id ) AS rnm FROM dbo.TestPartition ) --调试语句 --SELECT * FROM cte /* 2.再累加。用到了嵌套子查询 */ SELECT Id , number , ( SELECT SUM(number) FROM cte t1 WHERE t1.rnm <= t2.rnm AND -- t1.Id = t2.Id --保证是同一个人的数据在做累加 ) AS 'number 累计值' FROM cte t2;
作者:Chuck Lu GitHub |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
2017-03-02 BsonDocument
2016-03-02 ReSharper warns: “Static field in generic type”
2016-03-02 FileStream StreamWriter StreamReader BinaryReader
2015-03-02 Setup Entity Framework Environment
2015-03-02 What is Entity Framework?