Cypher:无法从连接的节点获取分组节点计数

时间:2013-08-31 19:59:12

标签: count neo4j aggregate cypher

对于这是一个重复问题的可能性表示道歉,但我仔细阅读了已经提出的问题,要么找不到与我的问题相关的问题,要么无法弄清楚它们与我的问题有什么关系。我也是一名新手,所以这也可能是一个非常简单的问题。

我正在尝试确定每个容器的名称,容器的总数以及每个容器中的项目数,以便我可以生成一个饼图,表示容器中项目的分布。到目前为止我构建的查询给了我一个真正的项目计数,但要么给我一个容器的计数(例如下面的查询),要么返回容器计数与项目数相同的值。 / p>

START c=node:internal_auto_index( TYPE = 'CONTAINERS' ) 
WITH c, COUNT( c.name ) as containerCount
MATCH i-[INSTANCE__CONTAINERS]->c 
RETURN c.name as containerName, containerCount, COUNT(i) as items, ( COUNT(i) / containerCount ) as percentage
ORDER BY c.name

我做错了什么?提前感谢您的时间。

干杯,

乔恩

1 个答案:

答案 0 :(得分:3)

第一个查询的结果有两个表达式。第一个表达式 c 用作应用第二个表达式的聚合函数 count()的组的键。由于每个 c 代表一个单个容器的组,因此聚合函数 count 肯定会被评估为1而不是容器的总​​数。

解决此问题的简单方法是在第一个查询中返回容器的计数,并将其转发到第二个查询,

START c=node:internal_auto_index( TYPE = 'CONTAINERS' ) 
WITH  COUNT(*) as containerCount
START c=node:internal_auto_index( TYPE = 'CONTAINERS' ) 
MATCH i-[INSTANCE__CONTAINERS]->c 
RETURN c.name as containerName, containerCount, COUNT(i) as items, ( COUNT(i) / containerCount ) as percentage
ORDER BY c.name

我知道它看起来有点多余,但我认为没有办法将每个容器和单个行中的容器总数作为查询结果返回。