Neo4j - 返回最大值节点

3

我正在使用以下命令通过CSV将数据加载到neo4j中:

load csv with headers from "file:///path_to.csv" as file
merge (d:DIAGNOSIS {name:file.DIAGNOSIS_SYNONYM})
merge (dn:DRUG_NAME {name:file.DRUG_NAME})
merge (tc:TOTAL_COST {name:toFloat(file.TOTAL_COST)})
merge (cnt:COUNT {name:toInt(file.COUNT)})
merge (ac:AVERAGE_COST {name:toFloat(file.AVERAGE_COST)})
create (dn)-[:for]->(d)
create (d)-[:costs]->(tc)
create (tc)-[:count]->(cnt)
create (cnt)-[:avg_costs]->(ac)

现在我想找到具有最高/最低总成本的诊断。

我尝试过:

MATCH ((dn)-[:for]-(d)-[:costs]-(tc)-[:count]-(cnt)-[:avg_costs]->(ac))
WITH d,tc, max(tc.name) as maximum
where tc.name= maximum
return d

然而,这会返回所有的诊断节点。有人能建议我错在哪里吗?

可能是重复问题:如何在集合上使用max()? - Liam
1个回答

8
由于您只使用了d :: DIAGNOSIStc :: TOTAL_COST,为什么要匹配整个路径?我认为您可以仅匹配(d:DIAGNOSIS) - [:costs] - (tc:TOTAL_COST)并忽略其余部分。
此外,请尽可能使用标签。标签将提高查询性能。
我相信使用ORDER BYLIMIT应该可以解决问题。尝试一下:
MATCH ((d:DIAGNOSIS)-[:costs]-(tc:TOTAL_COST))
RETURN d
ORDER BY tc.name DESC
LIMIT 1

或者,您可以首先匹配最大的tc.name,然后在第二个MATCH的WHERE中使用它。

MATCH (tc:TOTAL_COST)
WITH  max(tc.name) AS maximum
MATCH ((d:DIAGNOSIS)-[:costs]-(tc:TOTAL_COST))
WHERE tc.name = maximum
RETURN d

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接