作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是我的代码:
USE [tempdb];
GO
IF OBJECT_ID(N'dbo.t') IS NOT NULL
BEGIN
DROP TABLE dbo.t
END
GO
CREATE TABLE dbo.t
(
a NVARCHAR(8),
b NVARCHAR(8)
);
GO
INSERT t VALUES ('a', 'b');
INSERT t VALUES ('a', 'b');
INSERT t VALUES ('a', 'b');
INSERT t VALUES ('c', 'd');
INSERT t VALUES ('c', 'd');
INSERT t VALUES ('c', 'd');
INSERT t VALUES ('c', 'd');
INSERT t VALUES ('e', NULL);
INSERT t VALUES (NULL, NULL);
INSERT t VALUES (NULL, NULL);
INSERT t VALUES (NULL, NULL);
INSERT t VALUES (NULL, NULL);
GO
SELECT a, b,
COUNT(*) OVER (ORDER BY a)
FROM t;
关于this page of BOL ,微软表示:
If PARTITION BY is not specified, the function treats all rows of the query result set as a single group.
因此,根据我的理解,最后一个 SELECT
语句将给出以下结果。既然所有记录都被视为一个组,对吧?
a b
-------- -------- -----------
NULL NULL 12
NULL NULL 12
NULL NULL 12
NULL NULL 12
a b 12
a b 12
a b 12
c d 12
c d 12
c d 12
c d 12
e NULL 12
但实际结果是:
a b
-------- -------- -----------
NULL NULL 4
NULL NULL 4
NULL NULL 4
NULL NULL 4
a b 7
a b 7
a b 7
c d 11
c d 11
c d 11
c d 11
e NULL 12
谁能帮忙解释一下为什么?谢谢。
最佳答案
它提供了运行总计(此功能直到 version 2012 才在 SQL Server 中实现。)
ORDER BY
定义要聚合的窗口 UNBOUNDED PRECEDING
和CURRENT ROW
未指定时作为默认值。 SQL Server 默认为less well performing RANGE
选项而不是 ROWS
.
在关系的情况下,它们具有不同的语义,因为 RANGE
的窗口版本不仅包括当前行(和前面的行),还包括具有相同值 a
的任何附加绑定(bind)行。作为当前行。这可以从下面结果中每个人计算的行数中看出。
SELECT a,
b,
COUNT(*) OVER (ORDER BY a
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS [Rows],
COUNT(*) OVER (ORDER BY a
RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS [Range],
COUNT(*) OVER() AS [Over()]
FROM t;
返回
a b Rows Range Over()
-------- -------- ----------- ----------- -----------
NULL NULL 1 4 12
NULL NULL 2 4 12
NULL NULL 3 4 12
NULL NULL 4 4 12
a b 5 7 12
a b 6 7 12
a b 7 7 12
c d 8 11 12
c d 9 11 12
c d 10 11 12
c d 11 11 12
e NULL 12 12 12
要获得您期望的结果,请忽略两者 PARTITION BY
和ORDER BY
并使用空 OVER()
条款(也在上面显示)。
关于sql - TSQL OVER 子句 : COUNT(*) OVER (ORDER BY a),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14860162/
我是一名优秀的程序员,十分优秀!