我正在尝试执行一个SQL查询,这会给我带来奇怪的结果。以下是表格:
U1Base
包含有关用户提供的movie ratings
的信息 - 其中包含用户向电影提供的user ID, movie ID and Rating
(还包含与问题无关的其他信息)
U1Test
与U1Base具有相同的列,用于测试U1Base上的计算结果
这两个表是从MovieLens导入的,所以它们无可非议(我确实需要清理一些数据,但它只有80000行中的一行)
S1_Similarity
包括数据库中每两个用户之间的相似性度量
我想计算一个用户给他/她没有看过的电影评级的预测。为此,我想从u1base中推断并将结果与u1test进行比较。
u1test有20000行。
以下是我用于选择的查询:
SELECT test.user_id,
test.movie_id,
sum(cast(base.rating as float))/5
FROM u1test AS test,
u1base AS base
WHERE base.user_id<>test.user_id
AND base.movie_id=test.movie_id
AND base.user_id IN (
SELECT TOP 5 user_id2
FROM s1_similarity
WHERE user_id1=test.user_id
ORDER BY similarity desc
)
GROUP BY
test.user_id,test.movie_id
由于某种原因,此查询不会像我预期的那样返回20,000行。如果我增加顶部参数,则包含更多行。我认为u1test中的每一行都会得到一个计算的平均值。
我做错了什么?
多坦