分析函数中的rangs 和rows 怎么理解。

[复制链接]
查看11 | 回复4 | 2017-1-20 11:00:36 | 显示全部楼层 |阅读模式
分析函数中的rangs 和rows怎么理解。
--------------------------------------------------------丁俊的 一个ppt上面的例子
WITH t AS
(SELECT (CASE WHEN LEVEL IN (1,2) THEN 1

WHENLEVEL IN (4,5) THEN 6

ELSE LEVEL END)ID
FROM dual CONNECT BY LEVEL<10)--select * from t
--默认排序,逻辑当前行
SELECT id,SUM(ID) over(ORDER BY ID) default_sum,
--逻辑行上限到当前行,此当前行是逻辑当前行,和上面一样
SUM(ID) over(ORDER BY ID

RANGE BETWEEN unbounded preceding

AND CURRENT ROW) range_unbound_sum,
--物理当前行,按排序后的行位置计算

SUM(ID) over(ORDER BY ID

ROWS BETWEENunbounded preceding

AND CURRENT ROW) rows_unbound_sum,
--下面两条与上面的比较,换成了对窗口有一定的限制,同样分为--逻辑行和物理行
SUM(ID) over(ORDER BY ID

RANGE BETWEEN 1 preceding AND 2 following) range_sum,
SUM(ID) over(ORDER BY ID

ROWS BETWEEN 1 preceding AND 2 following) rows_sum
FROM t;

-----------------------------------------------------------------------------------------
ID DEFAULT_SUM RANGE_UNBOUND_SUM ROWS_UNBOUND_SUMRANGE_SUM ROWS_SUM
---------- ----------- ----------------- ---------------- ---------- ----------
1 2
2
1
5
5
1 2
2
2
5 11
3 5
5
5
3 16
6
23
23
11 33 21
6
23
23
17 33 25
6
23
23
23 33 27
7
30
30
30 42 30
8
38
38
38 24 24
9
47
47
47 17 17
9 rows selected
倒数第二列, 怎么出来的呀 。 看不懂!!!!

回复

使用道具 举报

千问 | 2017-1-20 11:00:36 | 显示全部楼层
range定义的是根据值的偏移量来划分的窗口,
SUM(ID) over(ORDER BY ID RANGE BETWEEN 1 preceding AND 2 following)
就是当前的ID值减去1( 1 preceding )加上2(2 following) 这么一个窗口。
当id=1, 窗口是 0~3, 也即前三行的累计,所以SUM=5
当id=3, 窗口是2~5, 只有它自己一行,所以SUM=3
当id=6, 窗口是5~8, 共5行, sum=33,
......
回复

使用道具 举报

千问 | 2017-1-20 11:00:36 | 显示全部楼层
newkid 发表于 2016-12-16 00:54
range定义的是根据值的偏移量来划分的窗口,
SUM(ID) over(ORDER BY ID RANGE BETWEEN 1 preceding AND 2...

这个问题困扰我好久了,非常感谢!!
回复

使用道具 举报

千问 | 2017-1-20 11:00:36 | 显示全部楼层
rows可在重复值中只取一个,而range无法避免在重复值中只取一个
回复

使用道具 举报

千问 | 2017-1-20 11:00:36 | 显示全部楼层
请问SUM(ID) over(ORDER BY ID RANGE BETWEEN unbounded preceding AND CURRENT ROW) range_unbound_sum这一列是怎么计算出来的,为啥第一个数就是2呢?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行