Neo4j 在Cypher中旋转数据

Neo4j 在Cypher中旋转数据,neo4j,cypher,neo4j-apoc,Neo4j,Cypher,Neo4j Apoc,我刚刚开始使用Neo4J数据库,我很难找到一个好方法来透视我正在使用的一些数据 我有一个基本查询,如下所示: MATCH(n:DATA),其中n.status=~“SUCCESS”返回n.group作为group,n.label作为label,avg(toFloat(n.durationMillis)/60000)作为Minutes,这将生成如下高窄数据: |Group |Label |Minutes| |-------|-------|-------| |group1 |label1 |1

我刚刚开始使用Neo4J数据库,我很难找到一个好方法来透视我正在使用的一些数据

我有一个基本查询,如下所示:
MATCH(n:DATA),其中n.status=~“SUCCESS”返回n.group作为group,n.label作为label,avg(toFloat(n.durationMillis)/60000)作为Minutes
,这将生成如下高窄数据:

|Group  |Label  |Minutes|
|-------|-------|-------|
|group1 |label1 |1.0    |
|group1 |label2 |2.0    |
|group1 |label3 |5.0    |
|group2 |label1 |3.0    |
|group2 |label3 |2.0    |
...
我想做的是透视这些数据,以提供一个简短而广泛的视图作为汇总表:

| Group | label1 | label2 | label3 |
| ----- | ------ | ------ | ------ |
|group1 | 1.0    | 2.0    | 5.0    |
|group2 | 3.0    | -      | 2.0    |
...
有没有一种简单的方法可以使用Cypher实现这一点?

为了让Neo4j工具(如Neo4j浏览器)从Cypher查询生成一个看起来像透视表的可视化,查询必须硬编码每个“列”的标题——因为Cypher查询无法动态生成它返回的值的名称。也就是说,您的
RETURN
子句必须看起来像
returngroup,label1,label2,label3

现在,如果您确实事先知道所有可能的标签,那么您确实可以执行一个简单的查询来返回透视表。例如:

MATCH (n:DATA)
WHERE n.status =~ "SUCCESS"
WITH n.group as Group, n.label AS l, AVG(n.durationMillis/60000.0) AS m
WITH Group, apoc.map.fromLists(COLLECT(l), COLLECT(m)) AS lmMap
RETURN Group,
  lmMap['label1'] AS label1,
  lmMap['label2'] AS label2,
  lmMap['label3'] AS label3

APOC函数返回从键和值列表生成的映射。如果
没有特定标签,其单元格值将为
null

谢谢!这绝对是一个好的开始。我应该能够修复我的列名,并根据需要定期更新查询。