【问题标题】:neo4j get values that match a criterianeo4j 获取符合条件的值
【发布时间】:2018-10-01 00:34:22
【问题描述】:

我正在处理一个 neo4j 查询,试图返回一个总所有权为 1(代表 100%)的节点。所以我总结了一个节点的所有权。我获取所有权总和的查询工作正常,如下所示:

match (o:owner)-[:mineral_interest_owner]->(w:well) return sum(o.ownership)

然后我尝试在表达式中使用它:

match (o:owner)-[:mineral_interest_owner]->(w:well) return sum(o.ownership) case when sum(o.ownership) = 1 then w.name else "None"

并得到这个错误: Neo.ClientError.Statement.SyntaxError: Invalid input 's': expected 'l/L' (line 3, column 3 (offset: 78)) "case" ^

这是我需要使用 APOC 的吗?

【问题讨论】:

    标签: neo4j neo4j-apoc


    【解决方案1】:

    除了您的直接问题之外,您的数据模型似乎需要改进。 ownership 属性应该owner 节点上,因为这意味着所有者对她/他感兴趣的所有井拥有完全相同的所有权百分比。相反,ownership 属性应该在 mineral_interest_owner 关系上——这将允许所有 ownership 百分比不同。

    假设您将上述数据模型改进合并到您的数据库中,此查询应返回所有者拥有该井 100% 的所有 owner/well 对。

    MATCH (owner:owner)-[i:mineral_interest_owner]->(well:well)
    WITH owner, well, SUM(i.ownership) AS pct
    WHERE pct = 1
    RETURN owner, well;
    

    【讨论】:

    • 感谢您的建议。我是石油和天然气租赁这片有趣土地的新手,所以我想弄清楚。我将合并这些更改。
    • 太棒了。顺便说一句,当一个人接受一个答案时,通常也会赞成它。
    【解决方案2】:

    你需要聚合然后使用where:

    MATCH (o:owner)-[:mineral_interest_owner]->(w:well)
    WITH w, 
         sum(o.ownership) AS cnt WHERE cnt = 1
    RETURN w
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-24
      • 2011-04-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多