下面的SQL代码完全符合我的要求。我想尝试使用Cypher做同样的事情。
select distances.userid as userid, dist/(sqrt(my.norm)*sqrt(users.norm)) as score
from (select userid,
sum((user.rating)*(ratings.rating)) as dist
from ratings, user
where user.itemid = ratings.itemid
group by userid) as distances,
(select userid, sum((rating)*(rating)) as norm
from ratings
group by userid) as users,
(select sum((rating)*(rating)) as norm
from user) as my
where users.userid = distances.userid
order by score desc
limit 80;
在我的密码图中,用户和物品之间的密码关系"RATES"包含用户评分。cypher节点用户包含userid和用户的平均评分,在sql中是ratings.rating.
中的help。我试图分别实现每个子查询,但我有麻烦,因为每个似乎都依赖于下一个,我不确定如何链接我的密码查询。
我如何在密码中实现这一点?
编辑 -------------------
成功翻译最后一个子查询。
SQLselect sum((rating)*(rating)) as norm
from user
数码
MATCH (n)-[r:RATES]->(m)
WHERE n.userid = '1'
RETURN sum((toInt(r.rating))*(toInt(r.rating))) as norm
仍然不确定如何在主查询中使用
使用WITH
语句连接子查询。
从neo4j备忘单中引用:
WITH语法类似于RETURN。它将查询部分分开显式地,允许您声明要结转到哪些标识符下一部分
WITH的neo4j手册页在这里