按不返回 运行 计数排序
order by not returning running count
在这个问题中 - - 我被告知“如果 window 子句同时包含 PARTITION BY 和 ORDER BY,它 returns 运行 计数在分区。因此,使用 ORDER BY 表达式,到目前为止在分区内已计算了多少行。"
为什么 sal=109
的所有值的累积计数都显示 4
(计数的最后一个值)?
=> SELECT deptno, sal, empno, COUNT(sal) OVER (
-> PARTITION BY deptno ORDER BY sal
-> ) AS COUNT
-> FROM emp;
deptno | sal | empno | count
--------+-----+-------+-------
10 | 101 | 1 | 1
10 | 104 | 4 | 2
------------------------------
20 | 100 | 11 | 1
20 | 109 | 7 | 4<-
20 | 109 | 6 | 4<-
20 | 109 | 8 | 4<-
20 | 110 | 10 | 6<-
20 | 110 | 9 | 6<-
------------------------------
30 | 102 | 2 | 1
30 | 103 | 3 | 2
30 | 105 | 5 | 3
您按 sal
排序,在 deptno
20 内有 3 行位于 109
。对于排序标准,有 3 行应该同时出现。添加所有 3 个后,在 100
1 行之后,您立即在 4。因此您得到所有 3 个 4
。
您需要不同的排序值才能获得不同的 运行 计数结果。
在这个问题中 -
为什么 sal=109
的所有值的累积计数都显示 4
(计数的最后一个值)?
=> SELECT deptno, sal, empno, COUNT(sal) OVER (
-> PARTITION BY deptno ORDER BY sal
-> ) AS COUNT
-> FROM emp;
deptno | sal | empno | count
--------+-----+-------+-------
10 | 101 | 1 | 1
10 | 104 | 4 | 2
------------------------------
20 | 100 | 11 | 1
20 | 109 | 7 | 4<-
20 | 109 | 6 | 4<-
20 | 109 | 8 | 4<-
20 | 110 | 10 | 6<-
20 | 110 | 9 | 6<-
------------------------------
30 | 102 | 2 | 1
30 | 103 | 3 | 2
30 | 105 | 5 | 3
您按 sal
排序,在 deptno
20 内有 3 行位于 109
。对于排序标准,有 3 行应该同时出现。添加所有 3 个后,在 100
1 行之后,您立即在 4。因此您得到所有 3 个 4
。
您需要不同的排序值才能获得不同的 运行 计数结果。