修改密码

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

修改昵称

当前昵称:
提交

申请证书

证书详情

Please complete this required field.

  • Ultipa Graph V4

Standalone

Please complete this required field.

Please complete this required field.

服务器的MAC地址

Please complete this required field.

Please complete this required field.

取消
申请
ID
产品
状态
核数
申请天数
审批时间
过期时间
MAC地址
申请理由
审核信息
关闭
基础信息
  • 用户昵称:
  • 手机号:
  • 公司名称:
  • 公司邮箱:
  • 地区:
  • 语言:
修改密码
申请证书

当前未申请证书.

申请证书
Certificate Issued at Valid until Serial No. File
Serial No. Valid until File

Not having one? Apply now! >>>

ProductName CreateTime ID Price File
ProductName CreateTime ID Price File

No Invoice

无法计算出正确的分组后每组的count

回答此问题
未解决
wanyisun2022-04-18
我想将查得的路径p用路径起点进行分组,并统计各组的路径条数,以下是我的uql:

uncollect [1,2,3] as startN with startN 
n(startN).e().n() as p
group by startN 
return  count(startN)

为什么我统计出来是总的路径条数,而不是每组的路径条数呢?
分组聚合count

1 个回答

  • 0 点赞

    您把最后一句改成 return count(p) 就能得到想要的结果了。


    您原来的写法问题在于,startN 并不是 p 的同源列,因此不能用来代替别名 p 进行相关的聚合运算。

    事实上,startN 是 p 的前一级数据流,可以理解为“父级”数据流。因为 p 是路径模板以 startN 为输入进行查询并输出的结果,这也是为什么尽管不是同源列,但仍可以用 startN 对 p 进行分组。

    您原来的写法相当于在子级数据流 p 已产生但未使用时,对一个父级数据流进行分组与聚合运算。这种用法是有问题的。

    如果一定要使用父级 startN 的值进行聚合,需要先将 startN 和 p 进行笛卡尔积,如以下代码所示。请注意,由于 startN 和 p 是父子关系,这里的 with 是将每个 startN 与其所产生的多个 p 进行乘积,相当于把 startN 和 p 变成了同源列:

    uncollect [1,2,3] as startN
    n(startN).e().n() as p
    with startN, p
    group by startN 
    return  count(startN)


    分组聚合最严谨的用法是使用同源的数据进行分组和聚合,因此原来的代码可以修改为:

    uncollect [1,2,3] as startN
    n(startN as n1).e().n() as p
    group by n1
    return  count(p)


    希望能对您有所启发。

    Ultipa Admin 2022-04-18
    • uql的最新版已经支持自动将父子列进行笛卡尔乘积,成为同源列了。您最初的写法已经能够返回每组的数量了。

      Ultipa Admin2022-06-10

    添加评论...

    取消
    提交

你的回答:

提交
取消