2017-05-07 59 views
0

我已经设置节点的最高计数:(u:User)-[:OWN]->(p:Product)暗号发现用户(S)与产品

我需要找出谁拥有最多的产品的用户(一个或多个)。

我可以用接近:

MATCH (u:User)-[r]->(p:Product) 
RETURN u.value as user, count(p.value) as Pcount 
order by Pcount desc 
limit 3 

user cntProduct 
Sammy 16 
Bob  16 
jo  12 

但我想只返回“萨米”和“鲍勃”。所以限制不是一个好的选择,因为我不知道有多少用户会符合条件。

任何想法如何做到这一点?

回答

0

试试这个:

MATCH (u:User)-[:OWN]->(p:Product) 
WITH u, COUNT(p.value) as count // calc de count for every user 
WITH MAX(count) as max // save the 'max' value from 'count' (16, in your case) 
MATCH (u:User)-[:OWN]->(p:Product) 
WITH u, COUNT(p.value) as count, max 
WHERE count = max // pass by WITH only when 'count' is equals 16 
RETURN u.value as user, count 

一个小数据集和工作在这里很好的测试。

+0

谢谢布鲁诺;这很好用!非常聪明。 (与此同时,我想出了创建用户存储节点集合以及他们拥有的产品数量的想法。 MATCH(u:User) - [:OWN] - >(p:Product) with u.value作为用户,计数(p.value)作为cnt_prod MERGE(TOT:总{U:用户,TOT:cnt_prod}); 然后 匹配(T:总) 返回t.cnt_prod为最大,作为用户收集(t.user) 通过Max desc 排序1;这个工程但不是很好的解决方案 – Rachel