如何使用双重聚合?
how can I use double aggregation?
我有以下问题。
我想获取进站交通较多的城市
架构如下 (origin:City)-[f:Transport]->(destiny:City)
交通工具可以是公共汽车、飞机、火车
现在我有这个:
MATCH (origin:City)-->(destiny:Ciudad)
WITH Count(c) as incoming , destiny
return MAX(numero_de_entradas),destiny
问题在于,我得到的结果与如果我不使用 MAX 时得到的结果相同,我得到的结果是按命运分组的,但我想获得其中的最大值。
有什么想法吗?
如果您确定每个目的地城市的计数,请按降序排列,return只有第一个,您将获得具有最多入境交通连接的城市。
MATCH (origin:City)-->(destiny:Ciudad)
WITH destiny, count(*) as incoming
order by incoming desc
return destiny, incoming
limit 1
编辑: 添加另一个选项。这看起来有点难看,但我认为它站得住脚。收集集合中的命运和入站连接数,并获得最大入站连接数。然后展开命运节点及其计数的集合,但只有 return 个与 max_incoming 标识符匹配的节点。不过,这似乎比第一种方法要多得多。这个的优点是,如果有多个城市与最多的入站连接相关联,那么它们都会被 returned。
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
当然,如果您只需要知道数字,您可以简单地 return 匹配行中的最大值。
MATCH (origin:City)-->(destiny:City)
WITH destiny, count(*) as incoming
RETURN max(incoming)
我有以下问题。
我想获取进站交通较多的城市 架构如下 (origin:City)-[f:Transport]->(destiny:City)
交通工具可以是公共汽车、飞机、火车
现在我有这个:
MATCH (origin:City)-->(destiny:Ciudad)
WITH Count(c) as incoming , destiny
return MAX(numero_de_entradas),destiny
问题在于,我得到的结果与如果我不使用 MAX 时得到的结果相同,我得到的结果是按命运分组的,但我想获得其中的最大值。
有什么想法吗?
如果您确定每个目的地城市的计数,请按降序排列,return只有第一个,您将获得具有最多入境交通连接的城市。
MATCH (origin:City)-->(destiny:Ciudad)
WITH destiny, count(*) as incoming
order by incoming desc
return destiny, incoming
limit 1
编辑: 添加另一个选项。这看起来有点难看,但我认为它站得住脚。收集集合中的命运和入站连接数,并获得最大入站连接数。然后展开命运节点及其计数的集合,但只有 return 个与 max_incoming 标识符匹配的节点。不过,这似乎比第一种方法要多得多。这个的优点是,如果有多个城市与最多的入站连接相关联,那么它们都会被 returned。
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
当然,如果您只需要知道数字,您可以简单地 return 匹配行中的最大值。
MATCH (origin:City)-->(destiny:City)
WITH destiny, count(*) as incoming
RETURN max(incoming)