neo4j 聚合函数

聚合(Aggregation)

为集合计算数据,Cypher提供聚类功能,与SQL的group by类似。在return语句中发现的任何聚类函数,所有没有聚类函数的列将作为聚合key使用。

计数

计数(count)使用来计算行数。Count有两种使用方法。Count(*)计算匹配的行的行数,count(<标识符>)计算标识符中非空值数。

计算节点数

计算链接到一个节点的节点数,可以使用count(*)。

查询:

START n=node(2)

MATCH (n)–>(x)

RETURN n, count(*)

返回开始节点和相关节点节点数。

分组计算关系类型

计算分组了得关系类型,返回关系类型并使用count(*)计算。

查询:

START n=node(2)

MATCH (n)-[r]->()

RETURN type®, count(*)

返回关系类型和其分组数。

计算实体数

相比使用count(*),可能计算标识符更实在。

查询:

START n=node(2)

MATCH (n)–>(x)

RETURN count(x)

返回链接到开始节点上的节点数

计算非空可以值数

查询:

START n=node(2,3,4,1)

RETURN count(n.property?)

求和(sum)

Sum集合简单计算数值类型的值。Null值将自动去掉。如下:

查询:

START n=node(2,3,4)

RETURN sum(n.property)

计算所有节点属性值之和。

平均值(avg)

Avg计算数量列的平均值

查询:

START n=node(2,3,4)

RETURN avg(n.property)

最大值(max)

Max查找数字列中的最大值。

查询:

START n=node(2,3,4)

RETURN max(n.property)

最小值(min)

Min使用数字属性作为输入,并返回在列中最小的值。

查询:

START n=node(2,3,4)

RETURN min(n.property)

聚类(COLLECT)

Collect将所有值收集到一个集合list中。

查询:

START n=node(2,3,4)

RETURN collect(n.property)

返回一个带有所有属性值的简单列。

相异(DISTINCT)

聚合函数中使用distinct来去掉值中重复的数据。

查询:

START a=node(2)

MATCH a–>b

RETURN count(distinct b.eyes)

neo4j 高级篇

排序(Order by)

输出结果排序可以使用order by 子句。注意,不能使用节点或者关系排序,仅仅只针对其属性有效。

通过节点属性排序节点

查询:

START n=node(3,1,2)

RETURN n

ORDER BY n.name

通过多节点属性排序节点

在order by子句中可以通过多个属性来排序每个标识符。Cypher首先将通过第一个标识符排序,如果第一个标识符或属性相等,则在order by中检查下一个属性,依次类推。

查询:

START n=node(3,1,2)

RETURN n

ORDER BY n.age, n.name

首先通过age排序,然后再通过name排序。

倒序排列节点

可以在标识符后添加desc或asc来进行倒序排列或顺序排列。

查询:

START n=node(3,1,2)

RETURN n

ORDER BY n.name DESC

空值排序

当排列结果集时,在顺序排列中null将永远放在最后,而在倒序排列中放最前面。

查询:

START n=node(3,1,2)

RETURN n.length?, n

ORDER BY n.length?

Skip

Skip允许返回总结果集中的一个子集。此不保证排序,除非使用了order by’子句。

跳过前三个

返回结果中一个子集,从第三个结果开始,语法如下:

查询:

START n=node(3, 4, 5, 1, 2)

RETURN n

ORDER BY n.name

SKIP 3

前三个节点将略过,最后两个节点将被返回。

返回中间两个

查询:

START n=node(3, 4, 5, 1, 2)

RETURN n

ORDER BY n.name

SKIP 1

LIMIT 2

中间两个节点将被返回。

Limit

Limit允许返回结果集中的一个子集。


返回第一部分

查询:

START n=node(3, 4, 5, 1, 2)

RETURN n

LIMIT 3

函数(Functions)

在Cypher中有一组函数,可分为三类不同类型:判断、标量函数和聚类函数。

判断

判断为boolean函数,对给出的输入集合做判断并返回true或者false。常用在where子句中过滤子集。

All

迭代测试集合中所有元素的判断。

语法:

All(标识符 in iterable where 判断)

参数:

Ø iterable :一个集合属性,或者可迭代的元素,或一个迭代函数。

Ø 标识符:可用于判断比较的标识符。

Ø 判断:一个测试所有迭代器中元素的判断。

查询:

START a=node(3), b=node(1)

MATCH p=a-[*1…3]->b

WHERE all(x in nodes§ WHERE x.age > 30)

RETURN p

过滤包含age〈30的节点的路径,返回符合条件路径中所有节点。

Any

语法:ANY(identifierin iterable WHERE predicate)

参数:

Ø Iterable(迭代器):一个集合属性,或者可迭代的元素,或一个迭代函数。

Ø Identifier(标识符):可用于判断比较的标识符。

Ø Predicate(判断):一个测试所有迭代器中元素的判断。

查询:

START a=node(2)

WHERE any(x in a.array WHERE x = “one”)

RETURN a

None

在迭代器中没有元素判断将返回true。

语法:NONE(identifierin iterable WHERE predicate)

Ø Iterable(迭代器):一个集合属性,或者可迭代的元素,或一个迭代函数。

Ø Identifier(标识符):可用于判断比较的标识符。

Ø Predicate(判断):一个测试所有迭代器中元素的判断。

查询:

START n=node(3)

MATCH p=n-[*1…3]->b

WHERE NONE(x in nodes§ WHERE x.age = 25)

RETURN p

Single

如果迭代器中仅有一个元素则返回true。

语法:SINGLE(identifierin iterable WHERE predicate)

参数:

Ø Iterable(迭代器):一个集合属性,或者可迭代的元素,或一个迭代函数。

Ø Identifier(标识符):可用于判断比较的标识符。

Ø Predicate(判断):一个测试所有迭代器中元素的判断。

查询:

START n=node(3)

MATCH p=n–>b

WHERE SINGLE(var in nodes§ WHERE var.eyes = “blue”)

RETURN p

Scalar函数

标量函数返回单个值。

Length

使用详细的length属性,返回或过滤路径的长度。

语法:LENGTH(iterable )

参数:

Ø Iterable(迭代器):一个集合属性,或者可迭代的元素,或一个迭代函数。

查询:

START a=node(3)

MATCH p=a–>b–>c

RETURN length§

返回路径的长度。

Type

返回关系类型的字符串值。

语法:TYPE(relationship )

参数:

Ø Relationship:一条关系。

查询:

START n=node(3)

MATCH (n)-[r]->()

RETURN type®

返回关系r的类型。

Id

返回关系或者节点的id

语法:ID(property-container )

参数:

Ø Property-container:一个节点或者一条关系。

查询:

START a=node(3, 4, 5)

RETURN ID(a)

返回这三个节点的id。

Coalesce

返回表达式中第一个非空值。

语法:COALESCE(expression [, expression]* )

参数:

Ø Expression:可能返回null的表达式。

查询:

START a=node(3)

RETURN coalesce(a.hairColour?,a.eyes?)

Iterable函数

迭代器函数返回一个事物的迭代器—在路径中的节点等等。

Nodes

返回一个路径中的所有节点。

语法:NODES(path )

参数:

Ø Path:路径

查询:

START a=node(3), c=node(2)

MATCH p=a–>b–>c

RETURN NODES§

Relationships

返回一条路径中的所有关系。

语法:RELATIONSHIPS(path )

参数:

Ø Path:路径

查询:

START a=node(3), c=node(2)

MATCH p=a–>b–>c

RETURN RELATIONSHIPS§

Extract

可以使用extract单个属性,或从关系或节点集合迭代一个函数的值。将遍历迭代器中所有的节点并运行表达式返回结果。

语法:EXTRACT(identifier in iterable : expression )

Ø Iterable(迭代器):一个集合属性,或者可迭代的元素,或一个迭代函数。

Ø Identifier(标识符):闭包中表述内容的标识符,这决定哪个标识符将用到。

Ø expression(表达式):这个表达式将对于迭代器中每个值运行一次,并生成一个结果迭代器。

查询:

START a=node(3), b=node(4),c=node(1)

MATCH p=a–>b–>c

RETURN extract(n in nodes§ : n.age)

返回路径中所有age属性值。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐