修改密码

请输入密码
请输入密码 请输入8-64长度密码 和 email 地址不相同 至少包括数字、大写字母、小写字母、半角符号中的 3 个
请输入密码
提交

修改昵称

当前昵称:
提交

??certificate-table.title_zh_CN??

??certificate-table.name_zh_CN?? ??certificate-table.issued-at_zh_CN?? ??certificate-table.valid-until_zh_CN?? ??certificate-table.serial_zh_CN?? ??certificate-table.actions_zh_CN??
??certificate-table.serial_zh_CN?? ??certificate-table.valid-until_zh_CN?? ??certificate-table.actions_zh_CN??

??certificate-table.no-data.p1_zh_CN?? ??certificate-table.no-data.p2_zh_CN??

??invoice-table.title_zh_CN??

??invoice-table.name_zh_CN?? ??invoice-table.create-time_zh_CN?? ??invoice-table.id_zh_CN?? ??invoice-table.price_zh_CN?? ??invoice-table.actions_zh_CN??
??invoice-table.name_zh_CN?? ??invoice-table.create-time_zh_CN?? ??invoice-table.id_zh_CN?? ??invoice-table.price_zh_CN?? ??invoice-table.actions_zh_CN??
v4.0
搜索
    中文EN
    v4.0

      CALL 子查询(V4.1)

       V4.1 

      格式、参数

      CALL 可以在一个 UQL 语句中插入一个以 WITH 子句为开头、以 RETURN 子句为结尾的子查询语句,从而对每个输入行的查询结果进行独立的运算,而非对所有输入行的所有查询结果进行统一的运算。子查询可以帮助 GROUP BY、ORDER BY、LIMIT、SKIP 等子句以及聚合函数、去重函数对 UQL 中语句的单次执行结果进行处理。

      语法:

      • 格式:
        call {
          with <columnA1>, <columnA2>, ...
          ...
          return <columnB1>, <columnB2>, ...
        }
      • 参数:(见下表)
      • 受影响列:<columnA> 及其所有同源列;别名非同源时先截断至最短成为同源列后再进行计算
      名称 类型 规范 描述
      <columnA> NODE,EDGE,PATH,ATTR,ARRAY,TABLE / UQL 主查询语句中的数据列
      <columnB> NODE,EDGE,PATH,ATTR,ARRAY,TABLE / UQL 子查询语句的返回值,不能与主查询中的别名重名,可被其后的主查询语句调用

      详解

      find().nodes([1, 5]) as nodes
      call {
        with nodes
        n(nodes).e()[:2].n() as p
        limit 2
        return p as path
      }
      return path
      

      上面 UQL 代码中的 CALL 子句将主查询中的数据列分解为多个子查询,并对每次查询结果分别进行行数限制:

      子查询内进行单次查询

      示例:不使用 GROUP BY 子句,查询顾客 CU001、CU002、CU003 各自拥有多少张银行卡

      uncollect ["CU001", "CU002", "CU003"] as user
      call { 
        with user
        n({_id == user}).e({@has}).n({@card} as n)
        return count(n) as number
      }
      return user, number
      

      解析:在 CALL 子句内,每个 user 的 n 分别进行聚合运算得到 number,相当于对所有 user 的 n 根据 user 分组并在组内进行聚合。

      子查询内进行多次查询

      示例:查找 10 笔转账金额大于 8,000 的边并为每一条边评分,如果边的起点、终点与银行卡 CA029 有过两步之内的转账行为,则为起点、终点加 0.5 分,起点、终点的得分总和即为该边的评分

      n({@card} as n1).re({@transfer.amount > 8000} as e).n({@card} as n2).limit(10)
      call {
        with n1, n2
        optional n(n1 as a1).e({@transfer})[:2].n({_id == "CA029"}).limit(1) 
        with CASE a1 when 0 then 0 else 0.5 END as c1
        optional n(n2 as a2).e({@transfer})[:2].n({_id == "CA029"}).limit(1) 
        with CASE a2 when 0 then 0 else 0.5 END as c2
        return c1+c2 as c
      }
      return e{*}, c
      

      解析:n1、n2 分别为每条边 e 的起点和终点,CALL 子句对流入其内的每一条 e 的 n1、n2 都分别计算出分值 c1、c2,再求和为 c,c 即为每条 e 的总分值,其长度与 n1、n2、e 的长度相等。

      请完成以下信息后可下载此书
      *
      公司名称不能为空
      *
      公司邮箱必须填写
      *
      你的名字必须填写
      *
      你的电话必须填写
      *
      你的电话必须填写