我有这样的数据模型:
带节点:
- 委托方
- 供应商
- 产品名称
而关系:
- 客户-推荐{资格认证} -〉产品
- 客户-购买-〉产品
- 供应商-销售-〉产品
而我正试图得到最畅销的产品与平均资格,我实际上尝试这个查询:
MATCH (p:Product)<-[b:Buy]-(c:Client)
CALL{
WITH c, p
MATCH (c)-[r:Recommend]->(p)
RETURN avg(r.qualification) as average_qualification
}
RETURN p, c, count(b) as qty, average_qualification
ORDER BY qty DESC
但是,查询会针对每个客户端的每个average_qualification返回一行(类似于以下内容):
但我希望按产品分组,因此需要合并产品相同的行,例如,行1和4将合并,平均资格将是产品的平均资格(不除以客户资格)。
1条答案
按热度按时间kokeuurv1#
您可以执行以下操作:
哪用这个样本数据:
将返回:
为了理解这个解决方案,以及为什么它与您的解决方案不同,我建议您阅读有关cardinality的概念。
没有必要同时计算[:buy]和(:Client),只保留其中一个,并使用
count
,这样我们就可以在完成第一个MATCH
时得到一个产品列表,而不是客户列表;第二个MATCH
也是如此,我们在r.qualification
上使用avg
,这样我们就可以维护产品列表,而不是推荐列表。