本文介绍能够进行自动聚合的函数。
数据准备
SELECT create_graph('graph_name');
SELECT * FROM cypher('graph_name', $$
CREATE (a:Person {name: 'A', age: 13}),
(b:Person {name: 'B', age: 33, eyes: "blue"}),
(c:Person {name: 'C', age: 44, eyes: "blue"}),
(d1:Person {name: 'D', eyes: "brown"}),
(d2:Person {name: 'D'}),
(a)-[:KNOWS]->(b),
(a)-[:KNOWS]->(c),
(a)-[:KNOWS]->(d1),
(b)-[:KNOWS]->(d2),
(c)-[:KNOWS]->(d2)
$$) as (a agtype);
min
min()
返回一组值中的最小值。
语法
min(expression)
返回值
根据表达式返回的值,可以是一个属性类型或一个列表。
参数
名称 | 描述 |
名称 | 描述 |
expression | 包含任意组合的属性类型和列表的集合的表达式。 |
注意事项
任何空值都将从计算中排除。
在混合集中,任何字符串值总是被认为小于任何数值,任何列表总是被认为小于任何字符串。
列表按字典顺序比较,即从列表开始到结束,列表元素逐对按升序比较。
min(null)
返回null
。
示例
SELECT *
FROM cypher('graph_name', $$
MATCH (v:Person)
RETURN min(v.age)
$$) as (min_age agtype);
返回属性age
中所有值的最小值。
min_age
---------
13
(1 row)
使用min()
与列表
数据准备,首先运行以下三个命令:
SELECT * FROM cypher('graph_name', $$ CREATE (:min_test {val:'d'}) $$) as (result agtype); SELECT * FROM cypher('graph_name', $$ CREATE (:min_test {val:['a', 'b', 23]}) $$) as (result agtype); SELECT * FROM cypher('graph_name', $$ CREATE (:min_test {val:[1, 'b', 23]}) $$) as (result agtype);
使用
min()
与列表。SELECT * FROM cypher('graph_name', $$ MATCH (v:min_test) RETURN min(v.val) $$) as (min_val agtype);
返回集合中所有值的最小值。在这种情况下,是列表
['a', 'b', 23']
,因为['a', 'b', 23]
和[1, 'b', 23]
两个列表被视为比字符串d
更小的值,且['a', 'b', 23]
中的字符串a
被视为比数值1
更小的值。min_val ---------------- ["a", "b", 23] (1 row)
max
max()
返回一组值中的最大值。
语法
max(expression)
返回值
根据表达式返回的值,可以是一个属性类型或一个列表。
参数
名称 | 描述 |
名称 | 描述 |
expression | 包含任意组合的属性类型和列表的集合的表达式。 |
注意事项
任何空值都将从计算中排除。
在混合集中,任何字符串值总是被认为小于任何数值,任何列表总是被认为小于任何字符串。
列表按字典顺序比较,即从列表开始到结束,列表元素逐对按升序比较。
max(null)
返回null
。
示例
SELECT *
FROM cypher('graph_name', $$
MATCH (n:Person)
RETURN max(n.age)
$$) as (max_age agtype);
返回属性age
中所有值的最大值。
max_age
---------
44
(1 row)
stDev
stDev()
返回给定值在组内的标准差。它使用标准的两遍方法,分母为N - 1
,并应在从总体中抽取样本进行无偏估计时使用。当计算整个总体的标准差时,应使用stDevP。
语法
stDev(expression)
返回值
Agtype浮点数。
参数
名称 | 描述 |
名称 | 描述 |
expression | Agtype数字表达式。 |
注意事项
任何空值都会被排除在计算之外。
stDev(null)
返回0.0(零)。
示例
SELECT *
FROM cypher('graph_name', $$
MATCH (n:Person)
RETURN stDev(n.age)
$$) as (stdev_age agtype);
返回属性age
中值的标准差。
stdev_age
--------------------
15.716233645501712
(1 row)
stDevP
stDevP()
返回给定值在一组数据中的标准差。它使用标准的两步法,分母为N
,当计算整个总体的标准差时应使用此函数。如果只是计算总体样本的标准差,则应使用stDev。
语法
stDevP(expression)
返回值
Agtype浮点数。
参数
名称 | 描述 |
名称 | 描述 |
expression | Agtype数字表达式。 |
注意事项
任何空值都会从计算中排除。
stDevP(null)
返回0.0(零)。
示例
SELECT *
FROM cypher('graph_name', $$
MATCH (n:Person)
RETURN max(n.age)
$$) as (max_age agtype);
返回属性age
值的总体标准差。
stdevp_age
--------------------
12.832251036613439
(1 row)
percentileCont
percentileCont()
返回给定值在一组数据中的百分位数,百分位数范围从0.0到1.0。它使用线性插值方法,如果所需的百分位数位于两个值之间,则计算这两个值之间的加权平均值。对于使用四舍五入方法的最近值,请参见percentileDisc。
语法
percentileCont(expression, percentile)
返回值
Agtype浮点数。
参数
名称 | 描述 |
名称 | 描述 |
expression | Agtype数字表达式。 |
percentile | 百分位数,一个介于0.0和1.0之间的Agtype数字值。 |
注意事项
任何空值都将从计算中排除。
percentileCont(null, percentile)
返回null
。
示例
SELECT *
FROM cypher('graph_name', $$
MATCH (n:Person)
RETURN percentileCont(n.age, 0.4)
$$) as (percentile_cont_age agtype);
返回属性age
中值的第40个百分位数,该值通过加权平均计算得出。在这种情况下,0.4是中位数,即第40个百分位数。
percentile_cont_age
---------------------
29.0
(1 row)
percentileDisc
percentileDisc()
函数返回给定值在一组数据中的百分位数,百分位数范围从0.0到1.0。它使用四舍五入的方法来计算最接近该百分位数的值。对于插值的情况,请参见percentileCont。
语法
percentileDisc(expression, percentile)
返回值
Agtype浮点数。
参数
名称 | 描述 |
名称 | 描述 |
expression | Agtype数字表达式。 |
percentile | 百分位数,一个介于0.0和1.0之间的Agtype数字值。 |
注意事项
任何空值都将从计算中排除。
percentileDisc(null, percentile)
返回null
。
示例
SELECT *
FROM cypher('graph_name', $$
MATCH (n:Person)
RETURN percentileDisc(n.age, 0.5)
$$) as (percentile_disc_age agtype);
返回属性age
中值的第50个百分位数。
percentile_disc_age
---------------------
33.0
(1 row)
count
count()
返回值或记录的数量,它有两种变体:
count(*)
返回匹配记录的数量。count(expr)
返回表达式返回的非空值的数量。
语法
count(expression)
返回值
Agtype整数。
参数
名称 | 描述 |
名称 | 描述 |
expression | Agtype表达式。 |
注意事项
count(*)
包括返回null
的记录。count(expr)
忽略null
值。count(null)
返回0(零)。count(*)
可用于返回节点数量。例如,与某个节点n相连的节点数量。
示例
-
SELECT * FROM cypher('graph_name', $$ MATCH (n {name: 'A'})-[]->(x) RETURN n.age, count(*) $$) as (age agtype, number_of_people agtype);
返回起始节点n(其名称值为
A
)的年龄属性以及与n相关的节点数量。age | number_of_people -----+------------------ 13 | 3 (1 row)
使用
count(*)
可以对关系类型进行分组和计数,返回每种关系类型的数量。SELECT * FROM cypher('graph_name', $$ MATCH (n {name: 'A'})-[r]->() RETURN type(r), count(*) $$) as (label agtype, count agtype);
返回关系类型及其数量。
label | count ---------+------- "KNOWS" | 3 (1 row)
使用count(expression)
返回值的数量
与其简单地使用count(*)
返回记录的数量,返回表达式实际返回的值的数量可能更有用。
示例
SELECT *
FROM cypher('graph_name', $$
MATCH (n {name: 'A'})-[]->(x)
RETURN count(x)
$$) as (count agtype);
返回与起始节点n连接的节点数量。
count
-------
3
(1 row)
计算非空值
count(expression)
可用于返回表达式返回的非空值的数量。
示例
SELECT *
FROM cypher('graph_name', $$
MATCH (n:Person)
RETURN count(n.age)
$$) as (count agtype);
返回具有Person
标签且年龄属性为非空值的节点数量。
count
-------
3
(1 row)
包含和不包含重复项的计数
示例
在以下示例中,我们试图找到所有我们的“朋友的朋友”,并统计他们的数量。
第一个聚合函数
count(DISTINCT friend_of_friend)
只会计算一次friend_of_friend
,因为DISTINCT
去除了重复项。第二个聚合函数
count(friend_of_friend)
会多次考虑相同的friend_of_friend
。
SELECT *
FROM cypher('graph_name', $$
MATCH (me:Person)-[]->(friend:Person)-[]->(friend_of_friend:Person)
WHERE me.name = 'A'
RETURN count(DISTINCT friend_of_friend), count(friend_of_friend)
$$) as (friend_of_friends_distinct agtype, friend_of_friends agtype);
B和C都认识D,因此如果不使用DISTINCT
,D将会被计数两次。
friend_of_friends_distinct | friend_of_friends
----------------------------+-------------------
1 | 2
(1 row)
avg
avg()
返回一组数值的平均值。
语法
avg(expression)
返回值
Agtype整数。
参数
名称 | 描述 |
名称 | 描述 |
expression | 一组数值的表达式。 |
注意事项
任何
null
值都将从计算中排除。avg(null)
返回null
。
示例
SELECT *
FROM cypher('graph_name', $$
MATCH (n:Person)
RETURN avg(n.age)
$$) as (avg_age agtype);
返回属性age
中所有值的平均值。
avg_age
---------
30.0
(1 row)
sum
sum()
返回一组数值的总和。
语法
sum(expression)
返回值
Agtype浮点数。
参数
名称 | 描述 |
名称 | 描述 |
expression | 一组数值的表达式。 |
注意事项
任何
null
值都将从计算中排除。sum(null)
返回null
。
示例
SELECT *
FROM cypher('graph_name', $$
MATCH (n:Person)
RETURN sum(n.age)
$$) as (total_age agtype);
返回属性age
中所有值的总和。
total_age
-----------
90
(1 row)
- 本页导读 (1)
- 数据准备
- min
- 使用min()与列表
- max
- stDev
- stDevP
- percentileCont
- percentileDisc
- count
- 使用count(expression)返回值的数量
- 计算非空值
- 包含和不包含重复项的计数
- avg
- sum