首页 > 解决方案 > 查询的目的是什么:对相同类型的不同节点的特定属性求和

问题描述

我对 cypher 和 Neo4j 很陌生,我正在尝试运行一个特定的查询,但我不确定如何使用 cypher 来表达它。

我正在使用销售报告数据集,其中一种节点类型是实际销售的产品。该产品有 3 个属性:名称、ID、利润。因此,节点通过它们的 ID 而不是它们的名称来唯一标识。因此,例如,我有在法国以 X 利润出售的香蕉和在西班牙以 Y 利润出售的香蕉。这是两个不同的节点,将它们分开的是它们的 ID。

这是用于创建图形的密码查询,因此您可以更好地掌握它:

LOAD CSV WITH HEADERS FROM 'file:///SalesRecords.csv' AS row
MERGE (r:Region {Name: row.Region})
MERGE (c:Country {Name: row.Country})
MERGE (p:Product {Name: row.ItemType, ID: row.OrderID, Profit: 
row.TotalProfit})
MERGE (s:Channel {Name: row.SalesChannel})
MERGE (c)-[:BELONGS_TO]->(r)
MERGE (p)-[:SOLD_IN]->(c)
MERGE (p)-[:SOLD_THROUGH]->(s)

所以,我想做的是:我想按名称列出所有不同的产品,并总结它们的利润。所以我想要的最终结果将是一个包含两列的表格,productName 和 totalProfit,其中一行中,例如,productName 是 Bananas,totalProfit 是 X+Y。

编辑:哦,我想按总利润订购

如果我的问题不够清楚,请直说。

提前致谢!

标签: neo4jcypher

解决方案


您可以使用sum function来获取一组数值的总和。

这里的分组键是节点的Name属性。Product

MATCH (p:Product)
RETURN p.Name as productName, sum(p.Profit) as totalProfit
ORDER BY totalProfit DESC

推荐阅读