SELECT
sum(unique1) OVER () AS total,
sum(unique1) OVER
(PARTITION BY four ORDER BY unique1 RANGE BETWEEN 5::int8 PRECEDING AND 6::int2 FOLLOWING),
unique1,
four
FROM
tenk1
WHERE
unique1 < 10;
返回:
total | sum | unique1 | four
-------+-----+---------+------
45 | 4 | 0 | 0
45 | 12 | 4 | 0
45 | 12 | 8 | 0
45 | 6 | 1 | 1
45 | 15 | 5 | 1
45 | 14 | 9 | 1
45 | 8 | 2 | 2
45 | 8 | 6 | 2
45 | 10 | 3 | 3
45 | 10 | 7 | 3
(10 rows)
在this的基础上进行微小更改
因为被四个分割使得每个帧只有2或3行.如果你在前面的5个和后面的6个之间,那么我认为在这种情况下,行/范围帧并不重要.我以为Range From,行From都会返回相同的结果.因为前5行、前6行、后6行每帧覆盖了足够的2、3行.
然而,这确实很重要.我想我确实理解了同样的查询,ROWS
而不是RANGE
.
引用手册中的内容:
在范围或组模式中,当前行的FRAME_START表示帧 从当前行的第一个对等行(窗口的 ORDER BY子句按与当前行相同的方式排序),而 FRAME_END of Current Row表示帧以当前行的 最后一排同行.在行模式中,当前行只表示当前行.
问:如何解读
partition by four order by unique1 rows between 5::int8 preceding and 6::int2 following