我正在处理neo4j查询,试图返回一个总拥有权为1(代表100%)的节点。所以我在总结一个节点的所有权。我的查询以获取所有权总和,如下所示:
version: '2'
services:
app:
build:
context: .
dockerfile: Dockerfile
image: myexampleapp
ports:
- 8080:80
tty: true
volumes:
- .:/var/www/example
links:
- mysql
mysql:
image: mysql:5.7.22
ports:
- 33060:3306
environment:
MYSQL_DATABASE: test
MYSQL_ROOT_PASSWORD: dev
volumes:
- ./data:/var/lib/mysql
所以我尝试在表达式中使用它:
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"
使用APOC是否需要此功能?
答案 0 :(得分:1)
您需要先汇总然后使用where
:
MATCH (o:owner)-[:mineral_interest_owner]->(w:well)
WITH w,
sum(o.ownership) AS cnt WHERE cnt = 1
RETURN w
答案 1 :(得分: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;