该查询的目的是:汇总相同类型的不同节点的特定属性

时间:2019-07-05 09:44:51

标签: neo4j cypher

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

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

编辑:哦,我想按totalProfit排序

如果我的问题还不够清楚,请这么说。

谢谢!

1 个答案:

答案 0 :(得分:1)

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

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

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