GBase 8a OLAP函数移动平均值AVG,移动汇总SUM,移动计数count over等使用样例

网友投稿 987 2022-10-06

本站部分文章、图片属于网络上可搜索到的公开信息,均用于学习和交流用途,不能代表睿象云的观点、立场或意见。我们接受网民的监督,如发现任何违法内容或侵犯了您的权益,请第一时间联系小编邮箱jiasou666@gmail.com 处理。

GBase 8a OLAP函数移动平均值AVG,移动汇总SUM,移动计数count over等使用样例

本文介绍GBase 8a数据库集群里,对移动平均AVG OVER,移动计数COUNT OVER,移动求和AVG OVER的使用样例。

样例数据

表结构

gbase> desc tt2;+-------+---------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+-------+---------+------+-----+---------+-------+| i | int(11) | YES | | NULL | || j | int(11) | YES | | NULL | || k | int(11) | YES | | NULL | |+-------+---------+------+-----+---------+-------+3 rows in set (Elapsed: 00:00:00.00)

数据

gbase> select * from tt2;+------+------+------+| i | j | k |+------+------+------+| 2 | 1 | 4 || 2 | 3 | 6 || 2 | 3 | 4 || 2 | 5 | 8 || 3 | 2 | 2 || 3 | 2 | 4 || 3 | 2 | 2 || 3 | 4 | 6 || 3 | 1 | 2 || 3 | 5 | 8 |+------+------+------+10 rows in set (Elapsed: 00:00:00.01)

移动计数 COUNT OVER

语法

COUNT(*/[DISTINCT] col ) OVER( [PARTITION BY col_name1,col_name2,…] [ORDER BY col_name1 [ASC/DESC], col_name2 [ASC/DESC],…])

说明

该函数用于计算分组中的记录数,如果是 COUNT(*),不用考虑 NULL 值,否则,不包含参数为 NULL 的记录,如果包含 DISTINCT,要做去重操作。

样例

本例中,对i列做分区partition, 对j列做排序,对k列做count。可以看到当排序的位置相同时,计数值是以整体累加的,和rank的效果类似。

gbase> SELECT *,COUNT(k) OVER(PARTITION BY i ORDER BY j DESC) AS sum FROM tt2;+------+------+------+-----+| i | j | k | sum |+------+------+------+-----+| 2 | 5 | 8 | 1 || 2 | 3 | 4 | 3 || 2 | 3 | 6 | 3 || 2 | 1 | 4 | 4 || 3 | 5 | 8 | 1 || 3 | 4 | 6 | 2 || 3 | 2 | 2 | 5 || 3 | 2 | 4 | 5 || 3 | 2 | 2 | 5 || 3 | 1 | 2 | 6 |+------+------+------+-----+10 rows in set (Elapsed: 00:00:00.06)

移动总计SUM OVER

语法

[PARTITION BY … ] [ORDER BY … [ASC/DESC] ])

说明

计算组内表达式的移动累加和。

样例

用例分析:首先会根据 i 分组,在同组内,根据 j 降序排列,从每组的第一个值开始向后累加 k 值,相同的 j 值,对应的累加和相同,都是加到最后一个 j 值对应的 k 值,如果遇到不同组,从 0 开始重新累加。

NULL 值的处理方式同聚合函数 sum 类似,如果全为 NULL 值,则结果为 NULL,否则 NULL 不进行累加。

gbase> SELECT *,sum(k) OVER(PARTITION BY i ORDER BY j DESC) AS sum FROM tt2;+------+------+------+------+| i | j | k | sum |+------+------+------+------+| 2 | 5 | 8 | 8 || 2 | 3 | 4 | 18 || 2 | 3 | 6 | 18 || 2 | 1 | 4 | 22 || 3 | 5 | 8 | 8 || 3 | 4 | 6 | 14 || 3 | 2 | 2 | 22 || 3 | 2 | 4 | 22 || 3 | 2 | 2 | 22 || 3 | 1 | 2 | 24 |+------+------+------+------+10 rows in set (Elapsed: 00:00:00.04)

移动平均 AVG OVER

语法

AVG([DISTINCT/ALL] expr) OVER( [PARTITION BY … ] [ORDER BY … [ASC/DESC] ])

说明

计算组内表达式的移动平均值。

样例

用例分析:首先会根据 i 分组,在同组内,根据 j 降序排列,从每组的第一个值开始向后累加 k 值,同时记录 count(k)的值,相同的 j 值,对应的累加和、count值相同,都是计算到最后一个 j 值对应的 k 值,如果遇到不同组,从 0 开始重新累加,最后用累加和除以 count 值则是最后的 avg 值。

NULL 值的处理方式同聚合函数 avg 类似,如果全为 NULL 值,则结果为 NULL,否则 NULL 不进行累加,也不计算在 avg内。

gbase> SELECT *,avg(k) OVER(PARTITION BY i ORDER BY j DESC) AS sum FROM tt2;+------+------+------+--------+| i | j | k | sum |+------+------+------+--------+| 2 | 5 | 8 | 8.0000 || 2 | 3 | 4 | 6.0000 || 2 | 3 | 6 | 6.0000 || 2 | 1 | 4 | 5.5000 || 3 | 5 | 8 | 8.0000 || 3 | 4 | 6 | 7.0000 || 3 | 2 | 2 | 4.4000 || 3 | 2 | 4 | 4.4000 || 3 | 2 | 2 | 4.4000 || 3 | 1 | 2 | 4.0000 |+------+------+------+--------+10 rows in set (Elapsed: 00:00:00.05)

本文所属权为https://gbase8.cn/4765

上一篇:重磅!智能化运维(AIOps)系统和工具首批试评估结果公布!
下一篇:再流弊的技术,也抵不住一次事故:兼谈技术管理 | 高效运维最佳实践07
相关文章

 发表评论

暂时没有评论,来抢沙发吧~