概述
聚合函数对一组值进行计算,并返回单个值作为结果。
目前支持纵向聚合,即将来自不同行的一组值聚合成单个值。暂不支持横向聚合,即将来自分组列表值的一组值聚合成单个值。
DISTINCT
函数avg()
,count()
,max()
,min()
,sum()
,collect_list()
,stddev_samp()
和stddev_pop()
均支持使用集合量词DISTINCT
在聚合前对值去重。
Null值
除count(*)
外,所有聚合函数在计算时会忽略null
值所在行。
示例图集
以下示例根据该图集运行:
avg()
计算一组值的平均值。
语法 | avg(<values>) |
||
参数 | 名称 | 类型 | 描述 |
<values> |
数值 | 目标值 | |
返回类型 | DOUBLE |
MATCH (n)
RETURN avg(n.score)
结果:
avg(n.score) |
---|
7.33333333333333 |
FOR item IN [2, "a", 3, "1.2", null]
RETURN avg(item)
结果:
avg(item) |
---|
3 |
collect_list()
将一组值放入一个列表。
语法 | collect_list(<values>) |
||
参数 | 名称 | 类型 | 描述 |
<values> |
任意 | 目标值 | |
返回类型 | LIST |
MATCH (n)
RETURN collect_list(n.title)
结果:
collect_list(n.title) |
---|
["Optimizing Queries","Efficient Graph Search","Path Patterns"] |
count()
返回输入中的总行数。
语法 | count(<values>) |
||
参数 | 名称 | 类型 | 描述 |
<values> |
任意 | 目标值 | |
返回类型 | UINT |
MATCH (n)
RETURN count(n)
结果:
count(n) |
---|
3 |
count(*)
count(*)
返回当前工作表中的总行数。
对比以下两条查询,能发现仅在使用count(*)
时将null
值纳入计算范围:
FOR item IN [1, "a", "2", "b3", null]
RETURN count(item)
结果:
count(item) |
---|
4 |
FOR item IN [1, "a", "2", "b3", null]
RETURN count(*)
结果:
count(*) |
---|
5 |
count(DISTINCT)
可在count()
中加入集合量词DISTINCT
来返回输入中不同的行数。
FOR item IN [1, 1, "a", "2", "b3"]
RETURN count(DISTINCT item)
结果:
count(DISTINCT item) |
---|
4 |
max()
返回一组值的最大值。
语法 | max(<values>) |
||
参数 | 名称 | 类型 | 描述 |
<values> |
数值 | 目标值 | |
返回类型 | DOUBLE |
MATCH (n)
RETURN max(n.score)
结果:
max(n.score) |
---|
9 |
FOR item IN [1, "a", "2.1", "b3"]
RETURN max(item)
结果:
max(item) |
---|
2 |
min()
返回一组值的最小值。
语法 | min(<values>) |
||
参数 | 名称 | 类型 | 描述 |
<values> |
数值 | 目标值 | |
返回类型 | DOUBLE |
MATCH (n)
RETURN min(n.score)
结果:
min(n.score) |
---|
6 |
FOR item IN [3, "a", "0.2", "b2"]
RETURN min(item)
结果:
min(item) |
---|
0 |
percentile_cont()
计算一组值的连续百分位数。
语法 | percentile_cont(<values>, <percentile>) |
||
参数 | 名称 | 类型 | 描述 |
<values> |
数值 | 目标值 | |
<percentile> |
数值 | Number between 0.0 and 1.0 | |
返回类型 | DOUBLE |
percentile_cont()
的计算步骤如下:
- 升序排列各值。
- 根据公式
p = percentile × (n − 1) + 1
计算百分位位置,其中n
是非null值的总数。 - 利用线性插值法确定百分位数:
- 若
p
为整数,则位置p
的对应点为百分位数。 - 若
p
为介于整数p1
和p2
之间的小数(p1
<p
<p2
),则在位置p1
的值v1
和位置p2
的值v2
之间插值,根据公式v1 + (p - p1) × (v2 - v1)
计算百分位数。
- 若
FOR item IN [3, 9, 4, 7, 6]
RETURN percentile_cont(item, 0.4)
结果:
percentile_cont(item, 0.4) |
---|
5.2 |
FOR item IN [3, 9, 4, 7, 6]
RETURN percentile_cont(item, 0.5)
结果:
percentile_cont(item, 0.5) |
---|
6 |
percentile_disc()
计算一组值的离散百分位数。
语法 | percentile_disc(<values>, <percentile>) |
||
参数 | 名称 | 类型 | 描述 |
<values> |
数值 | 目标值 | |
<percentile> |
数值 | Number between 0.0 and 1.0 | |
返回类型 | DOUBLE |
percentile_disc()
的计算步骤如下:
- 升序排列各值。
- 根据公式
p = percentile × (n − 1) + 1
计算百分位位置,其中n
是非null值的总数。 - 确定百分位数:
- 若
p
为整数,则位置p
对应的点为百分位数。 - 若
p
为小数,则抹去p
的小数部分取其整数部分p'
,位置p'
对应的点为百分位数。
- 若
FOR item IN [3, 9, 4, 7, 6]
RETURN percentile_disc(item, 0.4)
结果:
percentile_disc(item, 0.4) |
---|
4 |
FOR item IN [3, 9, 4, 7, 6]
RETURN percentile_disc(item, 0.5)
结果:
percentile_disc(item, 0.5) |
---|
6 |
stddev_pop()
计算一组值的总体标准差。
语法 | stddev_pop(<values>) |
||
参数 | 名称 | 类型 | 描述 |
<values> |
数值 | 目标值 | |
返回类型 | 数值 |
MATCH (n)
RETURN stddev_pop(n.score)
结果:
stddev_pop(n.score) |
---|
1.24721912892465 |
stddev_samp()
计算一组值的样本标准差。
语法 | stddev_samp(<values>) |
||
参数 | 名称 | 类型 | 描述 |
<values> |
数值 | 目标值 | |
返回类型 | DOUBLE |
MATCH (n)
RETURN stddev_samp(n.score)
结果:
stddev_samp(n.score) |
---|
1.52752523165195 |
sum()
计算一组值的总和。
语法 | sum(<values>) |
||
参数 | 名称 | 类型 | 描述 |
<values> |
数值 | 目标值 | |
返回类型 | DOUBLE |
MATCH (n)
RETURN sum(n.score)
结果:
sum(n.score) |
---|
22 |
FOR item IN [3, "a", "1.2", "b2"]
RETURN sum(item)
结果:
sum(item) |
---|
4 |