我有一个csv如下:
City State Country
A WB BAN
B WB BAN
C MA BAN
D MA BAN
E RG BAN
另一个文件有城市销售。我必须根据用户的要求在python中交替计算城市,地区,州的销售额。我可以在Neo4j中表示这些并从python中的单个函数访问销售,它会根据需要自动获取城市,州或地区吗?
城市销售数据如下:
City Period Sales_Amt($)
A May17 $5
B May17 $10
C May17 $15
D May17 $5
答案 0 :(得分:1)
数据的加载(例如使用LOAD CSV)可能如下所示:
LOAD CSV WITH HEADERS FROM 'file:///hierarchy.csv' as line fieldterminator ','
MERGE (c:Country {id: line.countryId})
MERGE (s:State {id: line.stateId})
MERGE (ci:City {id: line.cityId})
MERGE (c)-[:HAS_STATE]->(s)
MERGE (s)-[:HAS_CITY]->(ci);
销售数据的负载可能如下所示:
LOAD CSV WITH HEADERS FROM 'file:///sales.csv' as line fieldterminator ','
MATCH (ci:City {id: line.cityId})
CREATE (s:Sale {period: line.period, amount: toFloat(line.amount)})
MERGE(ci)-[:HAS_SALE]->(s);
现在,您必须根据入口点(国家,州,城市)的内容构建查询:
MATCH (c:Country {id: "theinputforcountry})-[:HAS_STATE]->(s:State)-[:HAS_CITY]->(ci:City)-[:HAS_SALE]->(s:Sale)
RETURN c.id, sum(s.amount);
或
MATCH (s:State {id: "theinputforstate"})-[:HAS_CITY]->(ci:City)-[:HAS_SALE]->(s:Sale)
RETURN s.id, sum(s.amount);
或
MATCH (ci:City {id: "theinputforcity"})-[:HAS_SALE]->(s:Sale)
RETURN ci.id, sum(s.amount);
希望这有帮助!
此致 汤姆
P.S。可以走一个可变长度的路径(所以你不必指定整个路径),也可以把它变成一个更通用的查询,它只是在WHERE和RETURN子句(WHERE)上有所不同会得到你输入的密钥,然后RETURN将在你输入的级别上进行分组)......但是这两种方法都使你不太清楚你想要完成什么(imo: - )。