【问题标题】:OrientDB group by query using graphOrientDB 使用图按查询分组
【发布时间】:2015-09-09 10:58:49
【问题描述】:

我需要对某个类的顶点属性执行分组聚合,但是 group by 字段是距当前节点两步之遥的顶点,我无法使其工作。

我的情况: 顶点 A 包含我要聚合的属性,并且有 n 个带有标签 references 的顶点。我要分组的顶点是这些顶点中的任何一个(B、C 或 D)如果该顶点具有到顶点 F 的 defined by

A ----references--> B --defined by--> E
  \---references--> C --defined by--> F
   \--references--> D --defined by--> G
     ...

我认为可行的查询是:

select sum(property), groupOn from (
    select property, out('references')[out('definedBy').@rid = F] as groupOn from AClass
) group by groupOn

但它不起作用,内部语句给了我一个不正确的奇怪响应(不返回任何顶点),我怀疑括号条件不支持out().@rid 的原因是我发现的文档声明只支持“=”。

out('references')[out('definedBy') contains F] 也不起作用,它返回 out('definedBy')$current 顶点)。

有人知道如何实现这一目标吗?在我的示例中,我想要的结果是一列中的属性和另一列中 C 顶点的 @rid。然后我可以愉快地按聚合执行我的组。

【问题讨论】:

    标签: sql group-by aggregate orientdb


    【解决方案1】:

    解决了!在 OrientDB 2.1(我正在尝试 rc4)中有一个名为 UNWIND 的新子句(请参阅文档中的 SELECT)。

    使用 UNWIND 我可以做到:

    SELECT sum(property), groupOn from (
      SELECT property, out('references') as groupOn
      FROM AClass
      UNWIND groupOn
    ) WHERE groupOn.out('definedBy')=F
    GROUP BY groupOn
    

    这可能是一个缓慢的函数,具体取决于 AClass 的顶点数量及其引用,如果我发现任何性能问题,我会报告。

    【讨论】:

      猜你喜欢
      • 2015-05-23
      • 2016-02-12
      • 1970-01-01
      • 2017-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-27
      • 2014-12-08
      相关资源
      最近更新 更多