情境:
graph image
John doe评定了2种成分,其中2种成分恰好属于汤配方,只有1种比萨饼。该查询应该返回汤配方,因为那些成分评级的平均值> 5
我有什么: 我从下面的查询开始:
MATCH(:主题{ref: 1}) - [IR:INGREDIENT_RATING] - GT;(:成分)< - [:HAS_INGREDIENT] - (R:配方) 在哪里ir.value> 5返回r;
我想要发生什么: 如果配料的评级高于5,则返回配方,但这并未考虑该配方的其他成分可能具有该用户给出的较低评级。
所以我必须扩展上面的查询,但我有点无能为力。
提前致谢,
更新1: 基于@InverseFalcon,我提出了这个,它给了我期望的结果:
MATCH(:主题{ref:' 1'}) - [ir:INGREDIENT_RATING] - >(i:成分) - [:HAS_INGREDIENT] - (r:Recipe) - [:KITCHEN] - >(K:厨房)
MATCH(r) - [HAS_INGREDIENT] - (in:Ingredient)
with r,k,in,sum(ir.value)AS sum
总和> 10个
返回DISTINCT r,收集(DISTINCT in)AS成分,k AS厨房,总和
ORDER BY sum DESC
第二场比赛是因为没有它,它只返回带有评级的成分,我需要所有这些。
只有一个奇怪的是,我得到一个重复的结果,即使很难,我在r上使用distinct。
答案 0 :(得分:0)
听起来你需要avg()
聚合函数来取多个值的平均值。这对你有用吗?
MATCH (:Subject {ref: 1})-[ir:INGREDIENT_RATING]->(:Ingredient)<-[:HAS_INGREDIENT]-(r:Recipe)
WITH r, avg(ir.value) as avg
WHERE avg > 5
RETURN r;