Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Neo4j Cypher聚合值计数_Neo4j_Cypher - Fatal编程技术网

Neo4j Cypher聚合值计数

Neo4j Cypher聚合值计数,neo4j,cypher,Neo4j,Cypher,我返回的日期如下所示: “乔纳森”|“芝加哥”| 6 |[“热”、“暖”、“冷”、“冷”、“冷”、“暖”] 其中第三列是第4列中的值计数 我想从第4列中的集合中提取值,并基于这些值创建新列。我的预期产出是: Hot | Cold | Warm,值1 | 3 | 2表示每个值的计数 我当前的查询是match(p)-[]->(c)-[]->(w)返回不同的p.name、c.name、count(w)、collect(w.weather) 我想这很简单,但我一辈子都想不出来。Cypher没有办法“透视

我返回的日期如下所示:

“乔纳森”|“芝加哥”| 6 |[“热”、“暖”、“冷”、“冷”、“冷”、“暖”]

其中第三列是第4列中的值计数

我想从第4列中的集合中提取值,并基于这些值创建新列。我的预期产出是:

Hot | Cold | Warm
,值
1 | 3 | 2
表示每个值的计数

我当前的查询是
match(p)-[]->(c)-[]->(w)返回不同的p.name、c.name、count(w)、collect(w.weather)


我想这很简单,但我一辈子都想不出来。

Cypher没有办法“透视”数据(如前所述)。这部分是因为它不支持动态生成返回值的名称(例如,“Cold”)——而正是这些名称在neo4j浏览器提供的
文本
表格
可视化中显示为“列”标题

但是,如果您知道您只有(比如)3个可能的“天气”名称,则可以使用如下查询,在
RETURN
子句中对这些名称进行硬编码:

MATCH (c:City)-[:HAS_WEATHER]->(w:Weather)
WITH c, {weather: w.weather, count: COUNT(*)} AS weatherCount
WITH c, REDUCE(s = {Cold: 0, Warm: 0, Hot: 0}, x IN COLLECT(weatherCount) | apoc.map.setKey(s, x.weather, x.count)) AS counts
MATCH (p:Person)-[:LIVES_IN]->(c)
RETURN p.name AS pName, c.name AS cName, counts.Cold AS Cold, counts.Warm AS Warm, counts.Hot AS Hot
上面的查询有效地获取了一次城市的天气数据(针对该城市的所有人),而不是每人一次

APOC函数是获取具有更新键值的地图的便捷方法