我怎样才能使用双重聚合?

时间:2016-01-10 00:50:11

标签: neo4j cypher nosql

我有以下问题。

我希望获得更多来港的城市 架构如下(来源:城市) - [f:运输] - >(命运:城市)

运输可以是公共汽车,飞机,火车

现在我有这个:

MATCH (origin:City)-->(destiny:Ciudad)
WITH Count(c) as incoming , destiny
return MAX(numero_de_entradas),destiny

这个问题就是我获得了相同的结果,如果我不使用MAX,我会获得按命运分组的结果,但我想获得那些结果的最大值。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

如果您确定每个目的地城市的数量,请按降序排序并仅返回第一个您将获得最多入境交通链接的城市。

MATCH (origin:City)-->(destiny:Ciudad)
WITH  destiny, count(*) as incoming
order by incoming desc
return destiny, incoming
limit 1

修改:添加其他选项。这看起来有点难看,但我认为它有水。收集集合中的命运和入站连接数,并获取最大入站连接数。然后展开命运节点及其计数的集合,但只返回与 max_incoming 标识符匹配的节点。这似乎比第一种方法要多得多。这个的优势在于,如果有多个城市与最多的入境连接相关联,那么它们都会被退回。

MATCH (origin:City)-->(destiny:City)
WITH destiny, count(*) as incoming
WITH collect([destiny, incoming]) as data, max(incoming) as max_incoming
UNWIND data as destiny
WITH destiny, max_incoming
WHERE destiny[1] = max_incoming
RETURN destiny[0], max_incoming

当然,如果您只需要知道数字,您只需从匹配的行中返回最大值。

MATCH (origin:City)-->(destiny:City)
WITH destiny, count(*) as incoming
RETURN max(incoming)