WITH

更新时间:2025-01-09 07:25:42

使用WITH子句,可以在结果集传递给后续查询部分之前对其进行操作。这些操作可以改变结果集的形状或条目数量。

WITH还可以像RETURN一样,为引入到结果中的表达式创建别名,使用这些别名作为绑定名称。

WITH还用于将图的读取与图的更新分开。查询的每一部分必须是只读或只写。从写入子句转换到读取子句时,可以使用可选的WITH来实现这一转换。

基于聚合函数结果进行过滤

聚合结果必须通过一个WITH子句才能进行过滤。

示例

SELECT *
FROM cypher('graph_name', $$
    MATCH (david {name: 'David'})-[]-(otherPerson)-[]->()
    WITH otherPerson, count(*) AS foaf
    WHERE foaf > 1
    RETURN otherPerson.name
$$) as (name agtype);

返回结果如下:

   name
----------
"Anders"
(1 row)

在使用COLLECT之前对结果进行排序

可以在将结果传递给COLLECT之前对其进行排序,从而对最终列表进行排序。

示例

SELECT *
FROM cypher('graph_name', $$
 MATCH (n) WITH n
 ORDER BY n.name DESC LIMIT 3
 RETURN collect(n.name)
$$) as (names agtype);

返回一个逆序排列的人名列表,限制为3个,并将其包含在一个列表中。

          names
--------------------------
["Emil","David","Ceasar"]
(1 row)

限制路径搜索的分支

可以先匹配路径,限制到一定数量,然后以这些路径为基础再次进行匹配,以及进行任意次数类似有限搜索。

示例

SELECT *
FROM cypher('graph_name', $$
    MATCH (n {name: 'Anders'})-[]-(m) WITH m
    ORDER BY m.name DESC LIMIT 1
    MATCH (m)-[]-(o)
    RETURN o.name
$$) as (name agtype);

从 'Anders' 开始,找到所有匹配的节点,按名称降序排列并获取顶部结果,然后找到与该顶部结果相连的所有节点,并返回它们的名称。

   name
----------
"Anders"
"Bossman"
(2 rows)
  • 本页导读 (1)
  • 基于聚合函数结果进行过滤
  • 在使用COLLECT之前对结果进行排序
  • 限制路径搜索的分支

点击开启售前

在线咨询服务